5

我的理解是散列需要包含可散列对象的两个不同的冻结集(不可变的 Python 集)应该导致两个不同的散列。为什么我会得到以下两个不同frozensets 的输出?

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
4

1 回答 1

5

您似乎偶然发现了两个frozenset具有相同哈希码和不同内容的 s。这并不像看起来那么奇怪,因为哈希码的属性是保证它们对于相等的对象是相等的,而对于不相等的对象可能是不同的。

来自 Python 文档:

哈希(对象)-> 整数

返回对象的哈希值。具有相同值的两个对象具有相同的哈希值。反过来不一定正确,但很可能。

最简单的例子是数字-1-2它们在 python 中具有相同的哈希码:

>>> print(hash(-1))
-2
>>> print(hash(-2))
-2
于 2015-04-30T04:29:55.303 回答