If you download the source code of Python, you will find it for sure!
But bear in mind the hash function is implemented for each kind of objects differently.
For example, you will find the unicode hash function in Objects/unicodeobject.c
in the function unicode_hash
. You might have to look a bit more to find the string hash function. Find the structure defining the object you are interested in, and in the field tp_hash
, you will find the function that compute the hash code of that object.
For the string object: The exact code is found in Objects/stringobject.c
in the function string_hash
:
static long string_hash(PyStringObject *a)
{
register Py_ssize_t len;
register unsigned char *p;
register long x;
if (a->ob_shash != -1)
return a->ob_shash;
len = Py_SIZE(a);
p = (unsigned char *) a->ob_sval;
x = *p << 7;
while (--len >= 0)
x = (1000003*x) ^ *p++;
x ^= Py_SIZE(a);
if (x == -1)
x = -2;
a->ob_shash = x;
return x;
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…