クラスを作成したが、そのクラスを定義しない__hash__
とします。次に、ドキュメントによると、__hash__(self)
デフォルトでid(self)
(のメモリアドレス)になります。self
ただし、この値がどのように使用されているかは、ドキュメントには記載されていません。
したがって、私のクラスのすべてのインスタンスのハッシュが同じになる__hash__
単純な場合return 1
、それらはすべて同じ基になるハッシュバケットにバケット化されます(これはCで実装されていると思います)。__hash__
ただし、これは、の戻り値がこの基になるハッシュテーブルの要素をbinするためのキーとして使用されていることを意味するものではありません。
だから本当に、私の質問は:によって返される値はどうなり__hash__
ますか?それは直接キーとして使用されますか、それともそのハッシュ(またはそれに対して実行された他の計算の結果)がハッシュテーブルのキーとして使用されますか?
重要な場合は、私はpython2.7を使用しています
編集:明確にするために、私はハッシュ衝突がどのように処理されるかについて尋ねていません。Pythonでは、これは線形チェーンで行われるようです。代わりに、の戻り値が__hash__
対応するバケットのメモリアドレス(?)にどのように変換されるかを尋ねています。