两个整数具有相同的哈希

时间:2019-07-03 05:11:44

标签: python python-3.x python-2.7 dictionary hash

我正在研究字典,并寻找方法来避免由于潜在的哈希冲突(src)而导致获取/设置/删除操作出现最坏情况的O(n)时间复杂度,并且了解到整数总是会哈希到本身,因此如果您将int用作字典的键,则冲突不会成为问题。但是,我在终端中对此进行了测试,这就是我所看到的:

>>> print hash(4), hash(3), hash(2), hash(1), hash(0), hash(-1), hash(-2), hash(-3), hash(-4)
4 3 2 1 0 -2 -2 -3 -4
>>> hash(-1) == hash(-2)
True

hash(-1) == -2hash(-2) == -2都很奇怪,所以我在字典中尝试过:

>>> d = {-3: 'a', -2:'b', -1:'c'}
>>> print d
{-1: 'c', -3: 'a', -2: 'b'}

好的,至少哈希冲突得到了正确处理。

为什么有两个具有相同哈希值的整数?

1 个答案:

答案 0 :(得分:2)

This上一个问题回答了该问题!这是 Tl; dr 版本:

  

哈希值-1被保留(用于标记C中的错误   实施)。如果哈希算法生成此值,我们只需   改为使用-2。