Fixups to the hash function for frozensets.
* Non-zero initial value so that hash(frozenset()) != hash(0). * Final permutation to differentiate nested sets. * Add logic to make sure that -1 is not a possible hash value.
This commit is contained in:
parent
57c2d930f6
commit
27e403ebe9
|
@ -663,7 +663,7 @@ frozenset_hash(PyObject *self)
|
|||
PySetObject *so = (PySetObject *)self;
|
||||
PyObject *key, *value;
|
||||
int pos = 0;
|
||||
long hash = 0;
|
||||
long hash = 1905176217L;
|
||||
|
||||
if (so->hash != -1)
|
||||
return so->hash;
|
||||
|
@ -676,6 +676,9 @@ frozenset_hash(PyObject *self)
|
|||
collapse to only a handful of distinct hash values. */
|
||||
hash ^= PyObject_Hash(key) * 3644798167u;
|
||||
}
|
||||
hash *= 69069L;
|
||||
if (hash == -1)
|
||||
hash = 590923713L;
|
||||
so->hash = hash;
|
||||
return hash;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue