Why is dictionary.keys() a list and not a set?
Christoph Zwerschke
cito at online.de
Sat Nov 26 16:39:00 EST 2005
>>> class mylist1(list):
>>> def __hash__(self): return 0815
>>>
>>> class mylist2(list):
>>> def __hash__(self): return id(self)
>>>
>>> Which of these user-defined types would you call "hashable"?
> Mike Meyer wrote:
>> The latter two, as the given __hash__ meets the specifications for
>> __hash__.
Martin v. Löwis wrote:
> This is not true. The second definition of __hash__ does not meet
> the specifications:
> "The only required property is that objects which compare equal have the
> same hash value"
As Mike has written in his last posting, you could easily "fix" that by
tweaking the equality relation as well. So technically speaking, Mike is
probably right. It would completely break common-sense semantics,
because for mylist2, if I have a=[1] and b=[1] then I will have a!=b.
This would not be very reasonable, but probably allowed by Python.
-- Christoph
More information about the Python-list
mailing list