【问题标题】:Python hash() function on strings字符串上的 Python hash() 函数
【发布时间】:2021-10-01 17:43:54
【问题描述】:

CPython2.7中如何计算某个特定字符串的hash值?

例如,这段代码:

print hash('abcde' * 1000)

即使我重新启动 Python 进程并重试(我做了很多次),也会返回相同的值。

所以,这个计算中似乎没有使用字符串的id()(内存地址),对吧?那怎么办?

【问题讨论】:

  • “即使在我重新启动 Python 进程并重试之后返回相同的值” - 不能保证,并且在 Python 3 上通常不是这样。“似乎字符串的 id()(内存地址)不用于此计算”-当然不是。否则,我们将没有 a == b 暗示 hash(a) == hash(b) 的不变量。
  • 我认为您需要运行help(hash)help(id) 才能了解两者之间的区别,因为它们不一样...
  • 也许这个帖子会有所启发? stackoverflow.com/questions/6008026/…
  • @BorrajaX,谢谢,我去看看

标签: python hash


【解决方案1】:

哈希值不依赖于内存位置,而是对象本身的内容。来自documentation

返回对象的哈希值(如果有的话)。哈希值是整数。它们用于在字典查找期间快速比较字典键。比较相等的数值具有相同的哈希值(即使它们是不同的类型,例如 1 和 1.0)。

请参阅 CPython 对 str.__hash__ 的实现:

【讨论】:

  • 谢谢。所以看起来,hash(string) 从运行到运行都是一样的,对吧?
  • @d-d 不,不保证每次都一样,但保证在同一个进程中返回相同的值。如果您想要一个不变的哈希,请改用hashlib 函数。
  • 是的,我想过,但我需要比这个模块中的任何散列函数更快的东西。可能是杂音哈希左右..
  • 查看各种哈希函数here
猜你喜欢
  • 1970-01-01
  • 2013-09-16
  • 2010-10-22
  • 1970-01-01
  • 1970-01-01
  • 2017-05-05
  • 2018-09-30
  • 1970-01-01
  • 2018-03-29
相关资源
最近更新 更多