字符串上的Python hash()函数

d-d*_*d-d 8 python hash

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

例如,这段代码:

print hash('abcde' * 1000)
Run Code Online (Sandbox Code Playgroud)

即使在我重新启动Python进程后再次尝试(我做了很多次),它返回相同的值.

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

Sel*_*cuk 12

散列值不依赖于内存位置,而是取决于对象本身的内容.从文档:

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

你可以在这里查看CPython实现类hash方法的源代码str:

https://svn.python.org/projects/python/trunk/Objects/stringobject.c

  • @dd不,每次都不保证相同,但保证在同一进程中返回相同的值.如果您想要一个不变的哈希,请使用[hashlib](https://docs.python.org/3/library/hashlib.html)函数. (7认同)
  • 谢谢。所以看起来,hash(string)在每次运行时都一样,对吧? (2认同)
  • 查看各种哈希函数[此处](http://softwareengineering.stackexchange.com/questions/49550/which-hashing-algorithm-is-best-for-uniqueness-and-speed) (2认同)