繁体   English   中英

如何在python中克隆队列?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM