Guido wrote: > (I suspect for a 2-element set of ints or strings, translating "x in > {C1, C2}" into "x in (C1, C2)" might actually be a slight win since > probing a tuple must be much faster than probing a set; but that's a > detail.)
A trivial but hopefully fairly representative benchmark: ActivePython 2.5.1.1 (ActiveState Software Inc.) based on Python 2.5.1 (r251:54863, May 1 2007, 17:47:05) [MSC v.1310 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import timeit >>> timeit.Timer("3 in (1,2,3)").timeit() 0.20900340099335493 >>> timeit.Timer("3 in frozenset((1,2,3))").timeit() 0.72151788129635008 >>> timeit.Timer("3 in choices", setup="choices = (1,2,3)").timeit() 0.21716441294536537 >>> timeit.Timer("3 in choices", setup="choices = frozenset((1,2,3))").timeit() 0.16064769736693307 This demonstrates that constructing a frozen set obviously takes longer, but suggests that searching even within a 3-element set (the construction time for which could presumably be amortized away by the compiler) is quicker than in a tuple, which is heartening. So the only overhead for using frozen sets is slightly more memory... John _______________________________________________ Python-3000 mailing list Python-3000@python.org http://mail.python.org/mailman/listinfo/python-3000 Unsubscribe: http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com