On 10/6/10 1:58 PM, kj wrote:

The short version of this question is: where can I find the algorithm
used by the tuple class's __hash__ method?

The function tuplehash() in Objects/tupleobject.c, predictably enough.

Now, for the long version of this question, I'm working with some
complext Python objects that I want to be able to compare for
equality easily.

These objects are non-mutable once they are created, so I would
like to use a two-step comparison for equality, based on the
assumption that I can compute (either at creation time, or as needed
and memoized) a hashkey/digest for each object.  The test for
equality of two of these objects would first compare their hashkeys.
If they are different, the two objects are declared different; if
they match, then a more stringent test for equality is performed.

The most straightforward way to implement __hash__ for a complicated object is to normalize its relevant data to a tuple of hashable objects and then call hash() on that tuple. A straightforward way to compare such objects is to calculate that very same normalized tuple for each one and compare those tuples. Cache it if necessary. Don't bother hashing to implement __eq__ unless if you are really optimizing for space and time.

--
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
 that is made terrible by our own mad attempt to interpret it as though it had
 an underlying truth."
  -- Umberto Eco

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to