Равенство и идентичность очередей - PullRequest
0 голосов
/ 11 сентября 2018

Будут ли два 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 когда-либо оценены как равные или идентичные.

1 Ответ

0 голосов
/ 12 сентября 2018

Два объекта равны (==), если один из их __eq__ методов оценивается как True.

Два объекта идентичны (is), если они фактически являются одним и тем же объектом по одному и тому же адресу памяти.

Если класс (или его родители) не реализуют метод __eq__, тогда сравнение на равенство становится сравнением идентичности.

Класс Queue не не реализует __eq__, поэтому два объекта Queue будут только равными , если они на самом деле идентичны .

Это может быть продемонстрировано тем фактом, что Queue() == Queue() является False.

...