我只是在做一些快速的性能测试,我注意到初始化一个列表一般比显式初始化慢四到六倍(这些可能是错误的术语,我不确定这里的行话)。例如:
>>> import timeit
>>> print timeit.timeit('l = list()', number = 10000000)
1.66420578957
>>> print timeit.timeit('l = []', number = 10000000)
0.448561906815
与元组和整数类似:
>>> print timeit.timeit('l = tuple()', number = 10000000)
1.10791182518
>>> print timeit.timeit('l = ()', number = 10000000)
0.23167181015
>>> print timeit.timeit('l = int()', number = 10000000)
1.3009660244
>>> print timeit.timeit('l = 0', number = 10000000)
0.232784032822
这是为什么?
请您参考如下方法:
使用 dis module检查字节码:
import dis
dis.dis(lambda: list())
产量
6 0 LOAD_GLOBAL 0 (list)
3 CALL_FUNCTION 0
6 RETURN_VALUE
同时
dis.dis(lambda: [])
产量
7 0 BUILD_LIST 0
3 RETURN_VALUE
因此 list() 需要查找全局名称并调用该对象,而 [] 则不需要。
