True 和 1 和 1.0 在 python 字典中被评估为相同

zai*_*zil 3 python dictionary boolean

谁能解释一下 python 字典的这种行为?

d = {}
d[True] = 'Magic'
d[1] = 'Cool'
d[1.0] = 'Hello'
print(d)

# {True: 'Hello'}
Run Code Online (Sandbox Code Playgroud)

为什么它不打印所有其他(键,值)对?

为什么 True、1 和 1.0 被评估为相同?

hir*_*ist 5

hash3 项中的是1, 1.0, True相同的(等于1)。如果没有冲突,Python 就会使用它作为字典的键。而且1 == 1.0 == TrueTrue没有发生碰撞。

这里有关于 python 字典旧实现的更多细节。新的实现按照这些思路进行操作(但保留了顺序)。

  • 是的!!哈希值相等且值相等。 (3认同)