18

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?

6
  • 3
    "returns the same value even after I restart the Python process and try again" - not guaranteed, and usually not true on Python 3. "it seems that id() (memory address) of the string doesn't used in this computation" - well, of course not. Otherwise, we wouldn't have the invariant that a == b implies hash(a) == hash(b). Commented Oct 28, 2016 at 4:30
  • I think you need to run help(hash) and help(id) to understand the difference between the two because they are not the same... Commented Oct 28, 2016 at 4:31
  • 1
    Maybe this thread will shed some light? stackoverflow.com/questions/6008026/… Commented Oct 28, 2016 at 4:32
  • @BorrajaX, thanks, I'll take a look Commented Oct 28, 2016 at 4:35
  • Also relevant: stackoverflow.com/q/19580412/1959808 Commented Jan 18, 2018 at 7:21

1 Answer 1

25

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:

Sign up to request clarification or add additional context in comments.

4 Comments

thanks. so it seems, that the hash(string) will be the same from run to run, right?
@d-d No, it is not guaranteed to be the same every time, but it is guaranteed to return the same value within the same process. If you want a non-changing hash, use hashlib functions instead.
yeah, I thought about it, but I need something faster than any hash function in this module. may be murmur hash or so..
Check out various hash functions here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.