class A(object):
def __init__(self, value):
self.value = value
x = A(1)
y = A(2)
q = [x, y]
q.remove(y)
以前に追加された特定のオブジェクトをリストから削除したいのですが、まだ参照があります。私は平等テストを望んでいません。私はアイデンティティテストをしたい。このコードはCPythonとIronPythonの両方で動作するようですが、言語でこの動作が保証されているのですか?比較演算子をオーバーライドしないPythonオブジェクトは、それ自身と同じですか?
list.remove
メソッドドキュメントは、same as del s[s.index(x)]
です。これは、同等性テストが実行されることを意味します。
__cmp__
、__eq__
、または__ne__
を上書きしないと、オブジェクト自体と同じになりますか?
興味深いことに、振る舞いはPython 3の逆であるようです。 –
'__cmp__'は[Python 3でなくなった]です(https://docs.python.org/3.0/whatsnew/3.0.html#ordering-comparisons)。あなたは '__eq__'を使って同じ効果を達成することができます。 – wim
__eq__が定義されていないのでしょうか?Python 3はアドレスで比較しますか? –