[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.


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

More information about the Python-3000 mailing list