[英]How to clone a queue in python?
我有一段代码,其中有一个优先级队列,我正在尝试克隆以遍历,
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时,那时优先级队列为空。 有人可以指出代码有什么问题吗?
如果您复制队列,则该队列不起作用。 您会得到完全相同的对象。
import Queue as Q
import copy
q1 = Q.PriorityQueue()
q2 = copy.copy(q1)
print repr(q2), repr(q1)
>> <Queue.PriorityQueue instance at 0x10568f2d8> <Queue.PriorityQueue instance at 0x10568f368>
从那里,您的printQueue语句实际上耗尽了Queue
。 这就是为什么如果您再次复制它为空; 您正在复制一个空队列。
如果要复制队列,可以使用Q.get()
和Q.put()
,甚至Q.queue
像这样使用Q.get()
q1 = Q.PriorityQueue()
## .. enter items
q2 = Q.PriorityQueue()
for i in q1.queue: q2.put(i)
但是,您应该阅读另一个问题,它有几个很好的答案! 特别是,您可能正在寻找一个数据结构,例如collections.deque
,而不是用于Threads
之间安全通信的Threads
Queue
。 了解如何在python中深度复制队列 。
好吧,copy.copy只是浅拷贝。 正如查理所说,您无法在PriorityQueues上进行深度复制,但是我发现由于pq是由队列实现的,因此这可能对您有用:
q2 = Q.PriorityQueue()
q2.queue = copy.deepcopy(q1.queue)
printQueue(q1)
printQueue(q2)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.