Да . В вашем примере q.remove(y)
удалит первое вхождение объекта, который сравнивается равным y
. Однако, как определяется класс A
, вы никогда не должны † сравнивать переменную, равную y
- за исключением любых других имен, которые также связаны с тем же y
пример.
Соответствующий раздел документации: здесь :
Если операция __cmp__(), __eq__() or __ne__()
не определена, класс
экземпляры сравниваются по идентификатору объекта («адресу»).
Таким образом, сравнение для A
экземпляров выполняется по идентификатору (реализовано как адрес памяти в CPython). Ни один другой объект не может иметь идентичность, равную id(y)
в течение жизни y
, то есть для , пока вы держите ссылку на y
(что вы должны, если вы собираетесь удалить его из списка!)
† Технически, все еще возможно иметь объекты в других местах памяти, которые сравниваются равными - mock.ANY
является одним из таких примеров. Но эти объекты должны переопределить свои операторы сравнения, чтобы форсировать результат.