使用
timeitpython中的模块测试计时。
from copy import *a=range(1000)def cop(): b=copy(a)def func1(): b=list(a)def slice(): b=a[:]def slice_len(): b=a[0:len(a)]if __name__=="__main__": import timeit print "copy(a)",timeit.timeit("cop()", setup="from __main__ import cop") print "list(a)",timeit.timeit("func1()", setup="from __main__ import func1") print "a[:]",timeit.timeit("slice()", setup="from __main__ import slice") print "a[0:len(a)]",timeit.timeit("slice_len()", setup="from __main__ import slice_len")
结果:
copy(a) 3.98940896988list(a) 2.54542589188a[:] 1.96630120277 #winnera[0:len(a)] 10.5431251526
当然,其中涉及的额外步骤
a[0:len(a)]是速度缓慢的原因。
这是两者的字节码比较:
In [19]: dis.dis(func1) 20 LOAD_GLOBAL 0 (range) 3 LOAD_ConST 1 (100000) 6 CALL_FUNCTION 1 9 STORE_FAST 0 (a) 3 12 LOAD_FAST 0 (a) 15 SLICE+0 16 STORE_FAST 1 (b) 19 LOAD_ConST 0 (None) 22 RETURN_VALUEIn [20]: dis.dis(func2) 20 LOAD_GLOBAL 0 (range) 3 LOAD_ConST 1 (100000) 6 CALL_FUNCTION 1 9 STORE_FAST 0 (a) 3 12 LOAD_FAST 0 (a) #same up to here 15 LOAD_ConST 2 (0) #loads 0 18 LOAD_GLOBAL 1 (len) # loads the builtin len(), # so it might take some lookup time 21 LOAD_FAST 0 (a) 24 CALL_FUNCTION 127 SLICE+3 28 STORE_FAST 1 (b) 31 LOAD_ConST 0 (None) 34 RETURN_VALUE
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)