Hash of None varies per-machine

Christian Heimes lists at cheimes.de
Fri Apr 3 16:07:52 EDT 2009


Paul Rubin wrote:
> Yes, hashes are 32 bit numbers and there are far more than 2**32
> possible Python values (think of long ints), so obviously there must
> be multiple values that hash to the same slot.

No, hashs are C longs. On most 64bit platforms a C long has 64bits. As
far as I know only 64bit Windows has a 32bit long type.

> If the docs say this shouldn't happen, then it's a bug.  Otherwise,
> it should probably be considered ok.

Can you show me the exact place in the docs? The NoneType code uses
_Py_HashPointer which returns the address of the PyObject* as hash. The
value may vary between platforms and compilers.

> Yes, anything that can be used as a dict key (basically all immutable
> values with equality comparison) should be hashable.

The __eq__ equality method is not related to the hash functions. But
__eq__ is very import to resolve hash collisions.

Christian




More information about the Python-list mailing list