我的理解是,散列两个不同的frozensets(不可变的Python集),需要包含可散列的对象,应该导致两个不同的散列。为什么我得到两个不同的冷冻器的输出?
In [11]: a
Out[11]: frozenset({(2, -2), (2, -1), (3, -2), (3, -1)})
In [12]: b
Out[12]: frozenset({(4, -2), (4, -1), (5, -2), (5, -1)})
In [13]: hash(a)
Out[13]: 665780563440688
In [14]: hash(b)
Out[14]: 665780563440688
答案 0 :(得分:3)
你似乎偶然发现了两个frozenset
s,它们具有相同的哈希码和不同的内容。这并不奇怪,因为它可能看起来像哈希码的属性是保证它们对于相等的对象是相等的,并且对于不相等的对象可能是不同的。
来自Python文档:
hash(object) - >整数
返回对象的哈希值。具有相同值的两个对象具有 相同的哈希值。反过来不一定是真的,但很可能。
最简单的例子是数字-1
和-2
,它们在python中具有相同的哈希码:
>>> print(hash(-1))
-2
>>> print(hash(-2))
-2