[Python-Dev] collections.idset and collections.iddict?

Jack Diederich jack at performancedrivers.com
Tue Mar 7 01:21:26 CET 2006


On Mon, Mar 06, 2006, Guido van Rossum wrote:
> On 3/6/06, Raymond Hettinger <python at rcn.com> wrote:
> > [Neil Schemenauer]
> > >I occasionally need dictionaries or sets that use object identity
> > > rather than __hash__ to store items.  Would it be appropriate to add
> > > these to the collections module?
> >
> > Why not decorate the objects with a class adding a method:
> >    def __hash__(self):
> >        return id(self)
> >
> > That would seem to be more Pythonic than creating custom variants of other
> > containers.
> 
> I hate to second-guess the OP, but you'd have to override __eq__ too,
> and probably __ne__ and __cmp__ just to be sure. And probably that
> wouldn't do -- since the default __hash__ and __eq__ have the desired
> behavior, the OP is apparently talking about objects that override
> these operations to do something meaningful; overriding them back
> presumably breaks other functionality.

I assumed Neil wanted a container that was id() sensitive, I've done this
occasionally myself to see if an object is in a container and not just
an object equivalent to the one I am checking for.

>>> a = set([1,2,3,4])
>>> b = set([1,2,3,4])
>>> a == b
True
>>> a is b
False
>>> container = [a]
>>> b in container
True
>>> container = [id(a)]
>>> id(b) in container
False
>>> 

-Jack



More information about the Python-Dev mailing list