[Python-Dev] object equality vs identity, in and dicts idioms and speed

Samuele Pedroni Samuele Pedroni" <pedroni@inf.ethz.ch
Fri, 4 Jan 2002 03:10:50 +0100


> > An identity_list would make for a portable idiom with comparable
> > overhead and will give to the identity case somehow the same speed
> > of the equality case...
> > 
> > And further anygui shows also a possible need for a WeakKeyIdentityDict...
> 
> Well, I'd say this is a clear indication that this has to go the path
> that all library extensions go (or should go): They are implemented in
> one project, then are used in other projects as well, until finally
> somebody submits the implementation to the Python core.
> 
> In the case of anygui, I'd suggest to include different
> implementations of the identity_list, and any other specialised
> container you may have:
> 
> - one implementation for C python that works across all Python
>   versions (in C)
> - if useful, one implementation for Python 2.2 using type inheritance,
>   in C, alternatively, one implementation in pure Python:
> 
> class identity_list(list):
>     def __contains__(self, elem):
>         for i in self:
>             if i is elem:
>                 return 1
>         return 0
> 
>     # need to implement count, index, remove
> 
>   It turns out that this class is as fast in my benchmark than the
>   Python loop over a builtin list, which is not surprising, as it is
>   the same loop.
> 
> - one implementation in Java for use with Jython.
> 
> - one implementation in pure Python which works across all Python
>   versions.
> 
> The configuration mechanics of anygui should then select an
> appropriate version.
> 
> Experience will tell which of those implementations are used in
> practice, and which are of use to other packages. That will eventually
> give a foundation for including one of them into the core
> libraries. People tend to invent new containers all the time (and new
> methods for existing containers), and I believe we have to resist the
> tempation of including them into the language at first sight.

I won't argue about that.
 
> Just make sure that you do *not* put those containers into the
> location where the Python library will eventually put them, as well;
> instead if the core provides them, have the configuration mechanics
> figure to use the builtin type, instead of the anygui-included
> fallback implementation.
 
In this case the above "you" is fully undefined.
I will archive this discussion for better times when
I have spare-cycles.

Anygui people is commited to ship just pure python code,
and I'm not really a developer for the project, just a jython
"consultant".
So I will just workaround otherwise, I already
knew that, this was mostly a survey, a valuable one
and thanks for the answers. 

My band-width in the near future is for helping
with Jython 2.2 and other personal stuff ...

Thanks, Samuele.