Reputation: 1815
How does a hash value of some particular string is calculated in CPython2.7?
For instance, this code:
print hash('abcde' * 1000)
returns the same value even after I restart the Python process and try again (I did it many times).
So, it seems that id()
(memory address) of the string doesn't used in this computation, right? Then how?
Upvotes: 18
Views: 49601
Reputation: 59425
Hash values are not dependent on the memory location but the contents of the object itself. From the documentation:
Return the hash value of the object (if it has one). Hash values are integers. They are used to quickly compare dictionary keys during a dictionary lookup. Numeric values that compare equal have the same hash value (even if they are of different types, as is the case for 1 and 1.0).
See CPython's implementation of str.__hash__
in:
Objects/unicodeobject.c
(for unicode_hash
)Python/pyhash.c
(for _Py_HashBytes
)Upvotes: 25