clu*_*msy 7 python performance
在可读性和性能方面,我应该使用 为数组预分配内存吗[None]*n?分配一个空的[]并.append()反复使用是否算浪费?
在这个简单的计时测试中,使用[None] * n确实看起来稍微快一些,但可以说不足以证明采用这种方法优于更常见的习惯用法。
import time
def func1(size):
a = [None] * size
for i in range(size):
a[i] = i
def func2(size):
a = []
for i in range(size):
a.append(i)
def func3(size):
a = [i for i in range(size)]
size = 1000000
repeat = 100
t0 = time.time()
for _ in range(repeat):
func1(size)
t1 = time.time()
for _ in range(repeat):
func2(size)
t2 = time.time()
for _ in range(repeat):
func2(size)
t3 = time.time()
print(t1 - t0, t2 - t1, t3 - t2)
Run Code Online (Sandbox Code Playgroud)
结果:
[None * size]然后索引:4.82秒append循环:6.37 秒重复测试 和size=1000给出repeat=100000类似的结果:
[None * size]然后索引:3.16秒append循环:4.88 秒再次使用size=10and repeat = 10000000:
[None * size]然后索引:6.09秒append循环:7.65 秒