Hash of None varies per-machine

Steven D'Aprano steve at REMOVE-THIS-cybersource.com.au
Sat Apr 4 07:44:52 EDT 2009


On Sat, 04 Apr 2009 13:09:06 +0200, Hendrik van Rooyen wrote:

>>Any object can be hashed if it has a working __hash__ method. There's no
>>reason not to have None hashable -- it costs nothing and allows you to
>>use None as a dict key.
> 
> So what happens if I try to pickle the dict and keep it for next time?

You pickle the dict and keep it for next time.

> Will I be able to access whatever I have associated with None?

Yes.

> (directly
> -  mydict[None], not in a for loop.) And if I send the pickle to another
> machine and unpickle it, what then? 

It just works.

> - is unpickling smart enough to
> construct the dict with the local hash of None?

Yes.

> - Seems to me that if it isn't, and you want to do this, there would
>    have to be a fixed, well known value for the hash of None.

Seems to me you have misunderstood the way pickling works.

On one machine:

>>> import pickle
>>> pickle.dump({None: "hello world"}, open("pickled", 'w'))

And then on another:

>>> import pickle
>>> pickle.load(open('pickled'))
{None: 'hello world'}

It just works.


-- 
Steven



More information about the Python-list mailing list