J'essaie de comprendre la hash
fonction Python sous le capot. J'ai créé une classe personnalisée où toutes les instances renvoient la même valeur de hachage.
class C:
def __hash__(self):
return 42
J'ai juste supposé qu'une seule instance de la classe ci-dessus peut être dans un dict
à tout moment, mais en fait, a dict
peut avoir plusieurs éléments avec le même hachage.
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
J'ai expérimenté un peu plus et j'ai trouvé que si je remplace la __eq__
méthode de telle sorte que toutes les instances de la classe se comparent égales, alors la dict
seule n'autorise qu'une seule instance.
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
Je suis donc curieux de savoir comment un dict
peut avoir plusieurs éléments avec le même hachage.