リスト クラスの__contains__
メソッドは、オブジェクト自体がリストの要素であるかどうかを確認しますか?それとも、指定されたパラメーターと同等の要素がリストに含まれているかどうかを確認しますか?
実証する例を教えてください。
>>> a = [[]]
>>> b = []
>>> b in a
True
>>> b is a[0]
False
これは、ID チェックではなく、(少なくともデフォルトでは) 値チェックであることを証明しています。ただし、必要に応じてクラスをオーバーライド__contains__()
して、ID チェックを行うことができることに注意してください。ただし、デフォルトでは、いいえです。
どのようにチェックを行うかは、クラスによって異なります。ビルトインの場合、演算子list
を使用します。そうしないと、たとえば安全に==
使用できません。'something' in somelist
より具体的には、アイテムがリスト内のアイテムと等しいかどうかを確認します。したがって、内部的にはhash(a) == hash(b)
比較である可能性が最も高くなります。ハッシュが等しい場合、オブジェクト自体もおそらく比較されます。