myClass
と の両方を実装するクラス ( と呼びましょう) が__hash__
あり__eq__
ます。また、オブジェクトを何らかの値にdict
マップする もありmyClass
、計算には時間がかかります。
私のプログラムの過程で、多くの (数百万のオーダー)myClass
オブジェクトがインスタンス化されます。これがdict
、これらの値を追跡するために を使用する理由です。
ただし、新しいmyClass
オブジェクトが古いオブジェクトと同等である場合があります (__eq__
メソッドで定義されているように)。そのため、そのオブジェクトの値を再度計算するのではなくmyClass
、dict
. これを達成するために、私はしますif myNewMyClassObj in dict
。
これが私の質問です:
そのin
句を使用すると、何が呼び出されますか、__hash__
または__eq__
? a を使用するポイントは、dict
O(1) ルックアップ時間であることです。したがって、__hash__
呼び出される必要があります。しかし、__hash__
と__eq__
が同等のメソッドではない場合はどうなるでしょうか? その場合、偽陽性になりif myNewMyClassObj in dict
ますか?
フォローアップの質問:
のエントリの数を最小限に抑えたいdict
ので、理想的には、一連の同等のmyClass
オブジェクトの 1 つだけをdict
. 繰り返しますが、 を__eq__
計算するときに を呼び出す必要があるようです。これにより、 aの O(1) ルックアップ時間が O(n) ルックアップ時間にif myNewClassObj in dict
汚されます。dict