[Python-ideas] An identity dict

M.-A. Lemburg mal at egenix.com
Sun May 30 23:16:27 CEST 2010


Benjamin Peterson wrote:
> In the spirit of collections.OrderedDict and collections.defaultdict, I'd like
> to propose collections.identitydict. It would function just like a normal
> dictionary, but ignore hash values and comparison operators and merely lookup
> keys based on the key's id().
> 
> This dict is very useful for keep track of objects that should not be compared
> by normal comparison methods. For example, I would use an identitydict to hold
> weak references that would otherwise fallback to their referant object's hash.
> 
> An advantage of formalizing this in collections would be to enable other Python
> implementations like PyPy, where id() is expensive, to provide an optimized
> identitydict.

Are you sure this is a good idea for the stdlib ?

id(obj) gives you the current storage address of an object
in CPython and these can be reused over time.

Using a key object to such a dict would not secure it's persistence
throughout the usage lifetime in that dict, since d[id(key)] = 1
doesn't increase the refcount of key.

Such reuse is bound to happen often for some Python object
types, due to the free-lists we're using in CPython and
the Python allocator which is optimized for reuse of
fixed-size memory chunks.

For experts, such a dictionary may have some value (e.g. to
work around the hash() requirement of normal dictionaries),
but I feel that newbies would have a hard time understanding
all the implications.

-- 
Marc-Andre Lemburg
eGenix.com

Professional Python Services directly from the Source  (#1, May 30 2010)
>>> Python/Zope Consulting and Support ...        http://www.egenix.com/
>>> mxODBC.Zope.Database.Adapter ...             http://zope.egenix.com/
>>> mxODBC, mxDateTime, mxTextTools ...        http://python.egenix.com/
________________________________________________________________________
2010-07-19: EuroPython 2010, Birmingham, UK                49 days to go

::: Try our new mxODBC.Connect Python Database Interface for free ! ::::


   eGenix.com Software, Skills and Services GmbH  Pastor-Loeh-Str.48
    D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg
           Registered at Amtsgericht Duesseldorf: HRB 46611
               http://www.egenix.com/company/contact/



More information about the Python-ideas mailing list