hea*_*her -1 python performance deque slice
如果我使用代码
from collections import deque
q = deque(maxlen=2)
while step <= step_max:
calculate(item)
q.append(item)
another_calculation(q)
Run Code Online (Sandbox Code Playgroud)
它如何在效率和可读性方面进行比较
q = []
while step <= step_max:
calculate(item)
q.append(item)
q = q[-2:]
another_calculation(q)
Run Code Online (Sandbox Code Playgroud)
calculate()并且another_calculation()在这种情况下并不真实,但在我的实际程序中只是两个计算.我正在为数百万步骤的每一步进行这些计算(我在2维空间中模拟离子).因为步骤太多,所以需要q很长时间并且使用大量内存,而another_calculation()只使用最后两个值q.我一直在使用后一种方法,然后听到deque提到并认为它可能更有效; 因此问题.
也就是说,python中的deques与普通列表切片相比如何?
q = q[-2:]
Run Code Online (Sandbox Code Playgroud)
现在这是一项代价高昂的操作,因为它每次都会重新创建一个列表(并复制引用).(这里令人讨厌的副作用是它改变了参考,q即使你可以使用它q[:] = q[-2:]来避免这种情况).
该deque对象只是更改列表指针的开头并"忘记"最旧的项目.所以它更快,它是它的设计用途之一.
当然,对于2个值,没有太大的区别,但是对于更大的数字,存在.