编程语言
首页 > 编程语言> > 不同的python frozensets具有相同的哈希值

不同的python frozensets具有相同的哈希值

作者:互联网

我的理解是,散列两个不同的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

解决方法:

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

从Python文档:

hash(object) -> integer

Return a hash value for the object. Two objects with the same value have
the same hash value. The reverse is not necessarily true, but likely.

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

>>> print(hash(-1))
-2
>>> print(hash(-2))
-2

标签:python,set,frozenset
来源: https://codeday.me/bug/20190628/1317413.html