为什么CPython的哈希值(-1)!= -1

时间:2013-06-01 11:33:29

标签: python hash cpython

int.__hash__简单地返回值似乎是合理的。果然,这似乎是CPython实现它的方式:

>>> hash(1)
1
>>> hash(2)
2
>>> hash(123456789)
123456789
>>> hash(-123456789)
-123456789

好的,对于所有最大整数x来说,这是否也适用?

>>> [x for x in range(-10000, 10000) if hash(x) != x]
[-1]

咦?

>>> hash(-1)
-2

为什么-1是此规则的例外?

1 个答案:

答案 0 :(得分:4)

来自http://effbot.org/zone/python-hash.htm

  

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