如何在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