私は、__hash__
と__eq__
の両方を実装するクラス(myClass
と呼ぶ)を持っています。また、myClass
オブジェクトをある値にマップするdict
があります。計算には時間がかかります。「キーを使用して呼び出すとどうなるのですか」
多くの(数百万のオーダーの)myClass
オブジェクトがインスタンス化されています。これが私がdict
を使用してそれらの値を追跡する理由です。
ただし、新しいmyClass
オブジェクトは、古いオブジェクト(__eq__
メソッドで定義されているもの)と同等であることがあります。だから、そのオブジェクトの値を再び計算するのではなく、dict
の古いmyClass
オブジェクトの値を参照するだけです。これを達成するために、私はif myNewMyClassObj in dict
をします。
は、ここに私の質問です:呼び出されるものを
私はin
句ことを使用し、__hash__
または__eq__
? dict
を使用するポイントは、O(1)検索時間です。したがって、__hash__
を呼び出す必要があります。しかし、__hash__
と__eq__
が同等の方法でない場合はどうなりますか?その場合、if myNewMyClassObj in dict
に対して偽陽性が表示されますか?
は質問をフォローアップ:
私は私のdict
内のエントリの数を最小限にしたいので、私は理想的dict
の等価myClass
オブジェクトのセットの一つだけ維持したいと思います。だから、再び、dict
のO(1)Oへの検索時間(n)の検索時間
@MartijnPieters:私は誤ってそれらを含める前にセーブをヒットしました、彼らは今あります。 – BrenBarn
すばらしい例! – inspectorG4dget
Pythonはバケットをハッシュテーブルで使用しません。各スロットに単一の値を含むスロットを使用します。スロットが満杯の場合は、別のスロットを選択します。一致または未使用のスロットが見つかるまで続きます。 – Duncan