为什么Python字典可以有多个具有相同哈希值的键?
- 论坛
- 为什么Python字典可以有多个具有相同哈希值的键?
12 浏览
为什么Python字典可以有多个具有相同哈希值的键?
我正在尝试理解Python中的hash
函数的内部工作原理。我创建了一个自定义类,其中所有实例返回相同的哈希值。
class C: def __hash__(self): return 42
我只是假设上述类的实例在dict
中一次只能有一个,但实际上dict
可以有多个具有相同哈希值的元素。
c, d = C(), C() x = {c: 'c', d: 'd'} print(x) # {<__main__.C object at 0x7f0824087b80>: 'c', <__main__.C object at 0x7f0823ae2d60>: 'd'} # 注意,dict有2个元素
我进一步进行了一些实验,发现如果我重写__eq__
方法,使得该类的所有实例都比较相等,那么dict
只允许一个实例。
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'} # 注意,dict只有1个元素
所以我很好奇如何让dict
具有相同哈希值的多个元素。