[Python-checkins] cpython: Move the active entry multiplication to later in the hash calculation
raymond.hettinger
python-checkins at python.org
Fri Aug 7 09:43:51 CEST 2015
https://hg.python.org/cpython/rev/2c124e30a324
changeset: 97315:2c124e30a324
user: Raymond Hettinger <python at rcn.com>
date: Fri Aug 07 00:43:39 2015 -0700
summary:
Move the active entry multiplication to later in the hash calculation
files:
Objects/setobject.c | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/Objects/setobject.c b/Objects/setobject.c
--- a/Objects/setobject.c
+++ b/Objects/setobject.c
@@ -760,15 +760,12 @@
frozenset_hash(PyObject *self)
{
PySetObject *so = (PySetObject *)self;
- Py_uhash_t hash = 1927868237UL;
+ Py_uhash_t hash = 0;
setentry *entry;
if (so->hash != -1)
return so->hash;
- /* Initial dispersion based on the number of active entries */
- hash *= (Py_uhash_t)PySet_GET_SIZE(self) + 1;
-
/* Xor-in shuffled bits from every entry's hash field because xor is
commutative and a frozenset hash should be independent of order.
@@ -790,6 +787,9 @@
if ((so->fill - so->used) & 1)
hash ^= _shuffle_bits(-1);
+ /* Factor in the number of active entries */
+ hash ^= ((Py_uhash_t)PySet_GET_SIZE(self) + 1) * 1927868237UL;
+
/* Disperse patterns arising in nested frozensets */
hash = hash * 69069U + 907133923UL;
--
Repository URL: https://hg.python.org/cpython
More information about the Python-checkins
mailing list