让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
是此规则的例外?
答案 0 :(得分:4)
来自http://effbot.org/zone/python-hash.htm:
保留哈希值-1(它用于标记C实现中的错误)。如果哈希算法生成此值,我们只需使用-2代替。