Reputation: 8173
I recently used the timeit module to do a very simple performance test of the python. The result really stunned me: the time consumed by x=x+x
is about 125 times of x+x
or y=x+x,
why?! I really hope someone will give me some clue about this, maybe I used the timeit wrong? Thanks!
Please notice that y=x+x;x=y
is as slow as x=x+x
… but the x=x+47
is as fast as x+x
testBasicOps()
testcase="pass", time lapse:0.001487secs
testcase="x=47", time lapse:0.002424secs
testcase="x=94", time lapse:0.002423secs
testcase="x=47*2", time lapse:0.002423secs
testcase="x+x", time lapse:0.003922secs
testcase="x*2", time lapse:0.005307secs
testcase="x=x+x", time lapse:0.497974secs
testcase="x=x*2", time lapse:0.727506secs
testcase="x=x+47", time lapse:0.005770secs
testcase="x=47+x", time lapse:0.004442secs
testcase="x+=x", time lapse:0.498920secs
testcase="y=x+x", time lapse:0.004102secs
testcase="y=x*2", time lapse:0.006327secs
testcase="y=x+x
x=y", time lapse:0.499644secs
testcase="x+x
y=x", time lapse:0.004948secs
testcase="x+x
x=y", time lapse:0.005126secs
testcase="y=10
x=y", time lapse:0.003351secs
testcase="pass", time lapse:0.001487secs
The code I used:
import timeit
import numpy as npy
def testBasicOps():
timeitSetup="""
x=47
y=0
"""
testCases=['pass','x=47',\
'x=94','x=47*2'\
,'x+x','x*2'\
,'x=x+x','x=x*2'\
,'x=x+47','x=47+x'\
,'x+=x','y=x+x'\
,'y=x*2','y=x+x\nx=y'\
,'x+x\ny=x','x+x\nx=y'\
,'y=10\nx=y']
minT=[]
tests=[]
for i in testCases:
tests.append(timeit.Timer(i,setup=timeitSetup))
minT.append(npy.mean(tests[-1].repeat(10,int(1e5))))
print 'testcase=\"%s\", time lapse:%fsecs'%(i,minT[-1])
def main():
print "#"*10
print "testBasicOps()"
testBasicOps()
if __name__ == '__main__':
main()
Upvotes: 2
Views: 362
Reputation: 11394
When you compute x=x+x
many thousands of times, x
becomes a very large. You're measuring the length of time it takes to add two very large numbers.
Upvotes: 11