我在 Python 中有一个双端队列,正在对其进行迭代。有时,当我进行交互时,双端队列会发生变化,从而产生RuntimeError: deque mutated during iteration
.
如果这是一个 Python 列表而不是双端队列,我只需迭代该列表的副本(通过像这样的切片my_list[:]
,但由于切片操作不能在双端队列上使用,我想知道处理这个问题最Pythonic的方法是什么?
我的解决方案是导入复制模块,然后迭代副本,例如for item in copy(my_deque):
这很好,但由于我到处搜索这个主题,我想我应该在这里发帖询问?
您可以通过创建列表来“冻结”它。没有必要将其复制到新的双端队列。列表当然足够好,因为您只需要它来进行迭代。
for elem in list(my_deque):
...
list(x)
从任何可迭代对象创建一个列表x
,包括 deque,并且在大多数情况下是最 Pythonic 的方式。
请记住,此解决方案仅在同一线程中(即循环内)修改双端队列时才有效。否则,请注意list(my_deque)
不是原子的,并且也在双端队列上迭代。这意味着如果另一个线程在运行时更改双端队列,您最终会遇到相同的错误。如果您处于多线程环境中,请使用锁。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)