我有一段代码,我有一个优先级队列,我试图克隆遍历,
import Queue as Q
import copy
q1 = Q.PriorityQueue()
def printQueue(q):
while not q.empty():
print (q.get()),
print ''
q1.put((5,'s'))
q1.put((2,'e'))
q1.put((0,'a'))
q1.put((0,'z'))
printQueue(copy.copy(q1))
print 'second'
printQueue(copy.copy(q1))
我在网上发现我可以用copy.copy做克隆。但是在我的代码中,它不起作用。当我第二次调用prinQueue时,优先级队列是空的。有人能指出代码的错误吗?
3条答案
按热度按时间kmynzznz1#
如果你复制一个队列,它不会工作。你得到的是完全相同的对象。
从这里开始,printQueue语句实际上耗尽了
Queue
。你正在复制一个空队列。如果要复制队列,可以使用
Q.get()
和Q.put()
,甚至像这样使用Q.queue
但是,你应该阅读另一个问题,它有几个很好的答案!特别是,你可能正在寻找一个数据结构,例如
collections.deque
,而不是同步的Queue
,用于Threads
之间的安全通信。参见how to deepcopy a queue in python。bsxbgnwa2#
好吧,copy.copy只是浅拷贝。正如Charlie所说,你不能在PriorityQueues上做深拷贝,但我发现由于pq是由队列实现的,这可能对你有用:
ulydmbyx3#
当我需要实现类似的东西时,我确实注意到了一件事,那就是.queue实现了一个类型(collections.deque)的列表。在我的例子中,我想知道列表中的字符串总共有多长,所以我只是迭代了. queue的一个副本。
我可能会直接在_rxBuffer.queue上迭代,但更确切地说,是复制并处理它。