3

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这条规则有例外?

4

1 回答 1

5

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

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

于 2013-06-01T11:35:58.100 回答