Laurent wrote: > >> With 64 bit 3.2.2 on my Win 7 Pentium, the difference was 4% and with >> floats (0.0 and 1.0), 6% > > For floats it is understandable. But for integers, seriously, 4% is a lot. > I would never have thought an interpreter would have differences like this > in syntax for something as fundamental as adding 1.
Why? Python integers are rich objects, not native ints. Adding 1 is a moderately heavyweight operation far more complicated than the same operation in C. n=n+1 and n+=1 call different methods and do different things, they are *not* just different syntax. Your intuition about what should and shouldn't take the same time should not be trusted. But really, we're talking about tiny differences in speed. Such trivial differences are at, or beyond, the limit of what can realistically be measured on a noisy PC running multiple processes (pretty much all PCs these days). Here are three runs of each on my computer: [steve@sylar python]$ python2.5 -m timeit -s 'n=0' 'n = n+1' 1000000 loops, best of 3: 0.508 usec per loop [steve@sylar python]$ python2.5 -m timeit -s 'n=0' 'n = n+1' 1000000 loops, best of 3: 0.587 usec per loop [steve@sylar python]$ python2.5 -m timeit -s 'n=0' 'n = n+1' 1000000 loops, best of 3: 0.251 usec per loop [steve@sylar python]$ python2.5 -m timeit -s 'n=0' 'n += 1' 1000000 loops, best of 3: 0.226 usec per loop [steve@sylar python]$ python2.5 -m timeit -s 'n=0' 'n += 1' 1000000 loops, best of 3: 0.494 usec per loop [steve@sylar python]$ python2.5 -m timeit -s 'n=0' 'n += 1' 1000000 loops, best of 3: 0.53 usec per loop Look at the variation between runs! About 130% variation between the fastest and slowest for each expression. And there's no reason to think that the fastest results shown is as fast as it can get. The time is dominated by noise, not the addition. For what it's worth, if I try it with a more recent Python: [steve@sylar python]$ python3.2 -m timeit -s 'n=0' 'n = n+1' 1000000 loops, best of 3: 0.221 usec per loop [steve@sylar python]$ python3.2 -m timeit -s 'n=0' 'n = n+1' 1000000 loops, best of 3: 0.202 usec per loop [steve@sylar python]$ python3.2 -m timeit -s 'n=0' 'n = n+1' 1000000 loops, best of 3: 0.244 usec per loop [steve@sylar python]$ python3.2 -m timeit -s 'n=0' 'n += 1' 1000000 loops, best of 3: 0.49 usec per loop [steve@sylar python]$ python3.2 -m timeit -s 'n=0' 'n += 1' 1000000 loops, best of 3: 0.176 usec per loop [steve@sylar python]$ python3.2 -m timeit -s 'n=0' 'n += 1' 1000000 loops, best of 3: 0.49 usec per loop I simply do not believe that we can justify making *any* claim about the relative speeds of n=n+1 and n+=1 other than "they are about the same". Any result you get, faster or slower, will depend more on chance than on any real or significant difference in the code. -- Steven -- http://mail.python.org/mailman/listinfo/python-list