gpt4 book ai didi

python - python字典的奇怪行为

转载 作者:行者123 更新时间:2023-12-03 23:41:49 25 4
gpt4 key购买 nike

我在学习 python 哈希函数时遇到了以下行为。

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

SO 已经有一篇很棒的帖子回答了原因:Why do -1 and -2 both hash to -2 in CPython?

由于 python 字典使用键的散列来存储值,因此预计会出现以下输出,因为 True1 具有相同的散列:

>>> 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 特有的,但我很想知道这种行为的原因。

最佳答案

它不仅检查对象的哈希值,还检查对象的相等性。你可以通过这个例子看到这个效果:

>>> class Samesies:
... def __hash__(self):
... return 1
... def __eq__(self, other):
... return True
...
>>> {Samesies(): 1, Samesies(): 2}
{<__main__.Samesies object at 0x0000023997ACEFA0>: 2}

编辑:1 == Truehash(1) == hash(True) 的原因是 bool 实际上是 int 的子类。

关于python - python字典的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65317706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com