擅长:python、mysql、java
<p>你可以通过创建一个列表来“冻结”它。没有必要把它复制到一个新的地方。一个列表当然足够好了,因为你只需要它来迭代。</p>
<pre><code>for elem in list(my_deque):
...
</code></pre>
<p><code>list(x)</code>从任何iterable<code>x</code>创建一个列表,包括deque,在大多数情况下,这是最具python风格的方法。</p>
<hr/>
<p>请记住,只有在同一线程(即在循环内)中修改deque时,此解决方案才有效。否则,请注意<code>list(my_deque)</code>不是原子的,并且也在deque上迭代。这意味着,如果另一个线程在deque运行时改变了它,那么您最终会出现相同的错误。如果您处于多线程环境中,请使用锁。</p>