Python hash() function on strings

hash, python

Solution

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`)

Problem

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?

Original source

Related problems