Ich versuche die Python- hash
Funktion unter der Haube zu verstehen . Ich habe eine benutzerdefinierte Klasse erstellt, in der alle Instanzen denselben Hashwert zurückgeben.
class C:
def __hash__(self):
return 42
Ich habe nur angenommen, dass immer nur eine Instanz der oben genannten Klasse in einer sein dict
kann, aber tatsächlich dict
kann a mehrere Elemente mit demselben Hash haben.
c, d = C(), C()
x = {c: 'c', d: 'd'}
print(x)
# {<__main__.C object at 0x7f0824087b80>: 'c', <__main__.C object at 0x7f0823ae2d60>: 'd'}
# note that the dict has 2 elements
Ich habe ein wenig mehr experimentiert und festgestellt, dass, wenn ich die __eq__
Methode so überschreibe , dass alle Instanzen der Klasse gleich sind, dict
nur eine Instanz zulässig ist.
class D:
def __hash__(self):
return 42
def __eq__(self, other):
return True
p, q = D(), D()
y = {p: 'p', q: 'q'}
print(y)
# {<__main__.D object at 0x7f0823a9af40>: 'q'}
# note that the dict only has 1 element
Ich bin gespannt, wie ein dict
Element mehrere Elemente mit demselben Hash haben kann.