我在学习Python哈希函数时,遇到了以下行为。
>>> hash(-1)
-2
>>> hash(-2)
-2
已经有一篇很优秀的 Stack Overflow 帖子回答了为什么 -1 和 -2 都会哈希成 -2: Why do -1 and -2 both hash to -2 in CPython?
由于 Python 字典使用键的哈希值来存储值,因此以下输出是预期的,因为 True
和 1
均具有相同的哈希值:
>>> my_dict = { True: "true", 1: "one"}
>>> my_dict
{True: 'one'}
>>> hash(True)
1
>>> hash(1)
1
但是如果我用以下代码尝试,我期望输出结果为{ -1: "Minus Two"}
,因为-1
和-2
具有相同的哈希值。但实际情况并非如此。
>>> my_dict = { -1: "Minus One", -2: "Minus Two"}
>>> my_dict
{-1: 'Minus One', -2: 'Minus Two'}
>>> hash(-1)
-2
>>> hash(-2)
-2
这种行为的原因是什么?难道字典不使用键的哈希值来存储它的值吗?
注意:我知道这是特定于CPython的,但我很想知道这种行为的原因。
1 == True
。 - Sraw