Randy Bush wrote: > for pKey, pVal in dict.iteritems(): > print \ > pKey[0], hash(pKey[0]), \ > pKey[1], hash(pKey[1]), \ > pKey[2], hash(pKey[2]), \ > "hash=", hash(pKey), \ > pVal[0], hash(pVal[0]), \ > pVal[1], hash(pVal[1]) > > when run with | sort, produces > > 12.0.0.0 -2054516913 8 8 7018 329707286 hash= -604503432 917088000 917088000 > 917088000 917088000 > 12.0.0.0 -2054516913 8 8 7018 329707286 hash= -604503432 917088000 917088000 > 917088000 917088000 > 12.0.0.0 -2054516913 8 8 7018 329707286 hash= -604503432 917088000 917088000 > 917088000 917088000 > 12.0.0.0 -2054516913 8 8 7018 329707286 hash= -604503432 917088000 917088000 > 917088000 917088000 > 12.0.0.0 -2054516913 9 -1293912648 7018 329707286 hash= -1578430040 917088000 > 917088000 917088000 917088000 > 12.0.0.0 -2054516913 9 -1293912648 7018 329707286 hash= -1578430040 917088000 > 917088000 917088000 917088000 > > not that there are two entries with the same hash=
Whatever the hash function is for your keys, it returns the same value for two different keys. A simple example of this kind of phenomenon: py> class C(object): ... def __hash__(self): ... return 1 ... py> c1, c2 = C(), C() py> d = {c1:1, c2:2} py> for key, value in d.iteritems(): ... print hash(key), key, value ... 1 <__main__.C object at 0x0126CCD0> 1 1 <__main__.C object at 0x012739D0> 2 Note that the hashes are the same. But are the objects the same? py> c1 == c2 False Nope. (This is because the default __eq__ method compares the ids of the two objects, and as you can see, they have different ids.) The point is this: you can have multiple objects in the same dict that have the same hash(), as long as none of those objects equals another. For more information, see: http://wiki.python.org/moin/DictionaryKeys STeVe -- http://mail.python.org/mailman/listinfo/python-list