Ethan Furman wrote: > Several folk have said that objects that compare equal must hash equal, > and the docs also state this > http://docs.python.org/dev/reference/datamodel.html#object.__hash__ > > I'm hoping somebody can tell me what horrible thing will happen if this > isn't the case?
If you were familiar with what a hash map is, you wouldn't ask. The thing is that the hash is used to look up the place in the map where the thing is stored. If two equal objects have different hashes, they will be stored in different places in the hash map. Looking for object1 will then not turn up with object2, even though they are equal. If this is something you don't care about, and all you care about is identity, then I'd derive the hash from each object's ID. This ID has another property which is something that is assumed for hashes, and your code seems a bit to get that wrong, too, and that is that the hash must not change. Again, the reason is that if the hash changes, the position in the hash map changes, too. If you then try to look up the changed object, it will look for it in the new place, but it won't be found because it is in the old place. For that reason, it is generally useful to use immutable types like integers, floats, strings and tuples thereof as keys. Since you can't change them, you basically have the guarantee that they hash the same. Uli -- Domino Laser GmbH Geschäftsführer: Thorsten Föcking, Amtsgericht Hamburg HR B62 932 -- http://mail.python.org/mailman/listinfo/python-list