队列的相等性和同一性

Equality and identity of Queues

两个queue.Queue实例会相等还是相同

我有一些代码,其中创建了 Queue 个实例,附加到 list,然后删除。

l = []

def example():
    q = Queue()
    l.append(q)
    thingy = q.get()    # wait on background worker thread to put something in queue
    # ... do something with thingy ...
    l.remove(q)

对于(我认为不相关的)上下文,更广泛的程序中的其他线程会将它们自己的队列放入列表中,还有一个后台工作线程会将对象放入它在列表中找到的队列中.

我了解 list.remove() 首先检查 身份 然后检查 平等 。因此我想知道两个 Queue 实例是否会被评估为相等或相同。

如果两个对象的 __eq__ 方法之一的计算结果为 True,则两个对象相等 (==)。

如果两个对象实际上是位于同一内存地址的同一对象,则它们是相同的 (is)。

如果 class(或其父级)未实现 __eq__ 方法,则相等比较回退为身份比较。

The Queue class does not implement __eq__ 所以两个 Queue 对象只会 相等 如果它们实际上 相同 .

这可以通过 Queue() == Queue()False 的事实来证明。