[Martin v. Loewis] > > Now what is the fastest idiom equivalent to: > > > > obj in list > > > > when I'm interested in identity (is) and not equality? > > It appears that doing a plain for loop is fastest, see the attached > script below. On my system,it gives > > m1 0 0.00 5000 0.29 9999 0.60 1.0 0.61 > m2 0 0.60 5000 0.61 9999 0.62 1.0 0.62 > m3 0 1.81 5000 1.81 9999 1.81 1.0 1.83 > m4 0 0.00 5000 1.54 9999 3.11 1.0 3.17 Thanks, and, sorry I could have done the measuraments myself but I supposed that maybe someone should already know. The result makes also sense, is the version that does less consing and calling user python functions. But only profiling knows the truth <wink>. > > > Although my experience say that the equality case is the most > > common, I wonder whether some directy support for the identity case > > isn't worth, because it is rare but typically then you would like > > some speed. > > In Smalltalk, such things would be done in specialized > containers. E.g. the IdentityDictionary is a dictionary where keys are > considered equal only if identical. Likewise, you could have a > specialized list type. OTOH, if you need speed, just write an > extension module - doing a identical_in function is straight-forward. Is not really my code, but yes writing an extension (especially in jython) would be not too difficult but see below. > I'd hesitate to add identical_in to the API, since it would mean that > it needs to be supported for any container, the same sq_contains works > now. I see the problem. Implicitly I was asking whether adding builtin-in identity_list, identity_dict and corresponding weak versions for the dicts could make sense or is just code bloat. The context is anygui (www.anygui.org), I'm following it closely and I try to help with jython/swing issues. Anygui has code like this in the event handling logic: source_stack.append(id(source)) try: ... if not loop and not r.loop \ and id(obj) in source_stack: continue ... finally: source_stack.pop() Now this is a nice idiom and workarounds the identity-list problem, but mmh ... id is broken under jython (that means different objects can get the same id :( ) , also in 2.1 final. It is a long-standing bug and yes we are about to solve it but there is a trade-off and jython id will become precise but many times slower wrt to CPython version (we need to implement a weak-key-table :( ). 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... regards.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4