【发布时间】:2015-07-18 09:19:49
【问题描述】:
我在 Python 中有一个正在迭代的双端队列。有时双端队列在我交互时会发生变化,这会产生RuntimeError: deque mutated during iteration。
如果这是一个 Python 列表而不是双端队列,我只会遍历列表的副本(通过像 my_list[:] 这样的切片,但由于切片操作不能在双端队列上使用,我想知道最pythonic 的处理方式是什么?
我的解决方案是导入复制模块,然后遍历一个副本,例如for item in copy(my_deque):,这很好,但由于我搜索了这个主题的高低,我想我会在这里发帖问?
【问题讨论】:
-
为什么在迭代时要更改
deque?你能显示一些代码吗? -
对于对双端队列进行的任何修改,您希望在迭代中发生什么?
-
至于我为什么要改变它,这个双端队列是一个队列,用于在弹球机软件应用程序中保存一堆活动模式,并且在为模式提供服务时,它可以用于其他模式开始并添加到双端队列。我可以不调用迭代期间传入的任何内容,或者调用迭代期间删除的任何内容。真的我想像迭代开始时那样迭代双端队列,因此是副本。
-
临时阻止更改是一种选择吗?然后你可以使用 threading.Lock 对象。