Hash of None varies per-machine
Hendrik van Rooyen
mail at microcorp.co.za
Sat Apr 4 13:09:06 CEST 2009
"Steven D'Aprano" <steve at REMOVE..urce.com.au> wrote:
On Fri, 03 Apr 2009 10:50:08 -0700, ben.taylor wrote:
>> 2. Should the hash of None vary per-machine? I can't think why you'd
>> write code that would rely on the value of the hash of None, but you
>> might I guess.
>The value of hash(None) appears to be the value of id(None), which means
>it is the memory address that None happens to get, which means it will
>depend on the precise order that Python allocates things when it starts
>up, which will vary from platform to platform and version to version.
>> 3. Given that presumably not all things can be hashed (since the
>> documentation description of hash() says it gives you the hash of the
>> object "if it can be hashed"), should None be hashable?
>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?
Will I be able to access whatever I have associated with None?
(directly - mydict[None], not in a for loop.)
And if I send the pickle to another machine and unpickle it,
what then? - is unpickling smart enough to construct the dict
with the local hash of None?
- 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.
More information about the Python-list