why is self not passed to id()?
maric at aristote.info
Fri Sep 5 00:16:20 CEST 2008
Le Thursday 04 September 2008 23:35:18 Terry Reedy, vous avez écrit :
> Maric Michaud wrote:
> > Le Thursday 04 September 2008 22:26:53 Ruediger, vous avez écrit :
> >> class foo(list):
> >> __hash__ = lambda x: id(x)
> > Wow ! You are really going on trouble with this, believe me there is a
> > real good reason for list not to be hashable. A dictionnary or set
> > containing some of your foo is virtually inconsistent, read carefully the
> > manual about prerequesites for dict keys, they *need* to be immutable.
> No, the id comparison needs to be immutable -- which it is by default
> for object()s, being based on id. Mutable instances of classes derived
> from object work fine as keys as long as they keep default __eq__ and
> __hash__. List over-rides the default, so foo needs to reverse that
> def __eq__(self, other):
> return id(self) == id(other)
> This means, of course, that foo loses value-based equality comparison.
Yes, so what's the point of using lists as keys. "class a : pass" already do
More information about the Python-list