gpt4 book ai didi

python - 为什么两个不同对象的哈希函数返回相同的值?

转载 作者:行者123 更新时间:2023-12-02 04:20:19 26 4
gpt4 key购买 nike

我使用 Spyder,运行 Python 2.7。

刚发现有趣的东西:

  1. hash(-1) 和hash(-2) 都返回-2,有问题吗?我虽然不同对象上的哈希函数应该返回不同的值。我读过以前的帖子,-1 在 Python 中被保留为错误。
  2. hash('s') 返回 1835142386,然后 hash(1835142386) 返回相同的值。这是另一个问题吗?

谢谢。

最佳答案

-1 在 Python 中不是“保留为错误”。不确定那甚至意味着什么。如果不允许使用 -1,则有大量程序无法简单明了地编写。

“有问题吗?”不需要。哈希函数不需要为每个对象返回不同的哈希值。事实上,这是不可能的,因为可能的对象比散列多得多。 CPython 的 hash() 有一个很好的属性,即返回其非负数的参数,直到 sys.maxint,这就是为什么在你的第二个问题中 hash(hash ('s')) == hash('s'),但这是一个实现细节。

-1 和 -2 具有相同的散列这一事实仅意味着将这些值用作例如字典键将导致散列冲突。哈希冲突是 预期的情况,由 Python 自动解决,添加的第二个键将简单地放入字典中的下一个可用位置。访问第二个插入的 key 会比访问另一个 key 稍微慢一些,但在大多数情况下,不会慢到您会注意到的程度。

可以构造大量具有相同散列值的不相等对象,当将其存储在字典或集合中时,会导致容器性能大幅下降,因为每个添加的对象都会导致散列碰撞,但除非您去寻找它,否则您不会遇到这种情况。

关于python - 为什么两个不同对象的哈希函数返回相同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60540186/

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