【发布时间】:2018-09-11 17:17:33
【问题描述】:
两个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 实例是否会被评估为相等或相同。
【问题讨论】:
-
我不这么认为。每个对象都是独一无二的,不是吗?
-
这很容易测试:
Queue() == Queue()是False,所以不,他们不会。除非你覆盖Queue来改变它的行为。 -
@psinaught 并非每个对象都是唯一的。例如
[] == []是True。 -
@zvone 确实,谢谢。我想我的,也许是非理性的,担心会有一些模糊的情况,两个队列以某种方式变得相等或相同。我注意到
__eq__没有在 cpython Queue 类中实现,我猜这意味着它总是依赖于对象 ID? -
是的,
__eq__的基本实现是检查身份,即如果两个对象实际上是对同一对象的引用,则它们将相等。
标签: python queue identity equality