class A(object):
def __init__(self, value):
self.value = value
x = A(1)
y = A(2)
q = [x, y]
q.remove(y)
Quiero eliminar de la lista un objeto específico que se agregó antes y al que todavía tengo una referencia. No quiero una prueba de igualdad. Quiero una prueba de identidad. Este código parece funcionar tanto en CPython como en IronPython, pero ¿el lenguaje garantiza este comportamiento o solo es una casualidad?¿Es igual un objeto de Python que no anula los operadores de comparación?
La documentación del método list.remove
es esto: same as del s[s.index(x)]
, lo que implica que se realiza una prueba de igualdad.
¿Un objeto será igual a sí mismo si no anula __cmp__
, __eq__
o __ne__
?
Curiosamente, el comportamiento parece ser el opuesto en Python 3 –
'__cmp__' es [ido en Python 3] (https://docs.python.org/3.0/whatsnew/3.0.html#ordering-comparisons). Sin embargo, puedes lograr el mismo efecto usando '__eq__'. – wim
Me preguntaba si no hay un __eq__ definido, ¿compara Python 3 por dirección? –