以下のクラスのオブジェクトを使用して作成されたキーを持つ辞書を考えてみましょう:
class Point( object ):
def __init__( self, x, y ):
self.x = x
self.y = y
def __eq__( self, other ):
return self.x == other.x
def __hash__( self ):
return self.x.__hash__()
def __ne__( self, other ):
return self.x != other.x
>>> a = Point(1,1)
>>> b = Point(0, 2)
>>> dct = {}
>>> dct[a] = 15
>>> dct[b] = 16
>>> dct[a]
15
>>> c = Point(1,None)
>>> dct[c]
15
これは、とが同じハッシュを共有し、等しいc
ために発生します。指定された戻り値を返すa
関数を実装する O(1) 方法はありますか (以下の O(n) 実装とは対照的に?):c
a
def getKey( dct, key ):
for k in dct:
if k == key:
return k
return None