Sto cercando di capire la hash
funzione Python sotto il cofano. Ho creato una classe personalizzata in cui tutte le istanze restituiscono lo stesso valore hash.
class C:
def __hash__(self):
return 42
Ho solo supposto che solo un'istanza della classe sopra possa essere in a dict
in qualsiasi momento, ma in realtà a dict
può avere più elementi con lo stesso hash.
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
Ho sperimentato un po 'di più e ho scoperto che se sovrascrivo il __eq__
metodo in modo tale che tutte le istanze della classe siano uguali, allora l' dict
unica consente un'istanza.
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
Quindi sono curioso di sapere come una dict
può avere più elementi con lo stesso hash.