[Python-Dev] Joys of Optimization (original) (raw)

Raymond Hettinger raymond.hettinger at verizon.net
Wed Mar 17 22:04:05 EST 2004


For those with an interest, here are some timing scorecards which track the performance of dictionary iteration:

C:\python24\python timedictiter.py 0.638557468278 keys() 0.648748721903 values() 2.97803432843 items() 1.04057057611 list(d) 1.19934712281 tuple(d) 2.23167921018 for k in d.iterkeys(): pass 2.2001936003 for v in d.itervalues(): pass 4.07347675958 for k, v in d.iteritems(): pass

C:\pydev>\python23\python timedictiter.py 0.886520893746 keys() 0.861855713304 values() 3.44381233343 items() 6.86479910827 list(d) 2.48302854557 tuple(d) 2.85350994821 for k in d.iterkeys(): pass 2.8332120887 for v in d.itervalues(): pass 6.70084312509 for k, v in d.iteritems(): pass

C:\pydev>\python22\python timedictiter.py 0.81167636065 keys() 0.893352218441 values() 2.99887443638 items() 6.83444576677 list(d) 2.48634656967 tuple(d) 4.54763489163 for k in d.iterkeys(): pass 4.53761544779 for v in d.itervalues(): pass 7.77635645921 for k, v in d.iteritems(): pass

Raymond Hettinger

#------------------------------------------------------ P.S. Here is the timing suite:

from timeit import Timer

setup = """ import random n = 1000 d = {} for i in xrange(n): d[random.random()] = i keys = d.keys values = d.values items = d.items """

stmts = [ 'keys()', 'values()', 'items()', 'list(d)', 'tuple(d)', 'for k in d.iterkeys(): pass', 'for v in d.itervalues(): pass', 'for k, v in d.iteritems(): pass', ]

for stmt in stmts: print min(Timer(stmt, setup).repeat(5, 10000)), stmt



More information about the Python-Dev mailing list