objects as mutable dictionary keys

Peter Maas peter at somewhere.com
Mon Dec 27 23:52:37 CET 2004


Andrew Koenig schrieb:
>>This strikes me because if one can do this with instances of user
>>defined classes why not with lists? Trying to use lists as dict
>>keys yields "TypeError: list objects are unhashable". So why are
>>list objects unhashable and user defined objects hashable? For
>>user defined objects hash(x1) = id(x1), why not do the same
>>with lists?
> 
> 
> If d is a dict and t1 and t2 are tuples, and t1 == t2, then d[t1] and d[t2] 
> are the same element.
> 
> If lists used the id as the hash, this property would not hold for lists.

This leads to the question:

Why does (t1 == t2 => d[t1] identical to d[t2]) hold for user defined
objects and not for lists? My answer: because the cmp function looks at
id() for user defined objects and at list content for lists.

Why does the cmp function _have_ to look at lists contents?
My answer: because of the existence of list literals.

> Can you give me an example of a program for which you consider such behavior 
> to be useful?

I'm not interested in using lists as dict keys. I was just searching
for an explanation why user defined objects can be used as dict keys
contrary to lists.

-- 
-------------------------------------------------------------------
Peter Maas,  M+R Infosysteme,  D-52070 Aachen,  Tel +49-241-93878-0
E-mail 'cGV0ZXIubWFhc0BtcGx1c3IuZGU=\n'.decode('base64')
-------------------------------------------------------------------



More information about the Python-list mailing list