[Python-3000] __hash__ : Problem with either documentation or understanding

Nick Coghlan ncoghlan at gmail.com
Wed Jul 30 00:55:13 CEST 2008


Charles Hixson wrote:
> .../Python-3.0b2/Python-3.0b2/Doc/build/html/reference/datamodel.html#object.__hash__
> 
> """If a class defines mutable objects and implements a __cmp__() or __eq__() 
> method, it should not implement __hash__(), since the dictionary 
> implementation requires that a key’s hash value is immutable (if the object’s 
> hash value changes, it will be in the wrong hash bucket).
> """
> 
> What I had been planning to do was implement a hash code created by hashing a 
> unique integer, say the sequential order in which the instance of the class 
> was created.  This would be unique and unchanging number, so the explanation 
> of why __hash__ should not be created seems wrong.  Or *could* it be created?  
> In which case that statement that it shouldn't be created is wrong.
> 
> (Or, of course, I'm misunderstanding things.)

 From earlier in the paragraph you quoted:

"""The only required property is that objects which compare equal have 
the same hash value;"""

Objects which compare equal must also end up in the same hash bucket in 
order for dictionaries to work correctly.

Cheers,
Nick.

P.S. Chris is right that this question is technically off-topic.


More information about the Python-3000 mailing list