12

リスト クラスの__contains__メソッドは、オブジェクト自体がリストの要素であるかどうかを確認しますか?それとも、指定されたパラメーターと同等の要素がリストに含まれているかどうかを確認しますか?

実証する例を教えてください。

4

4 に答える 4

13
>>> a = [[]]
>>> b = []
>>> b in a
True
>>> b is a[0]
False

これは、ID チェックではなく、(少なくともデフォルトでは) 値チェックであることを証明しています。ただし、必要に応じてクラスをオーバーライド__contains__()して、ID チェックを行うことができることに注意してください。ただし、デフォルトでは、いいえです。

于 2012-04-18T13:24:35.990 に答える
0

どのようにチェックを行うかは、クラスによって異なります。ビルトインの場合、演算子listを使用します。そうしないと、たとえば安全に==使用できません。'something' in somelist

より具体的には、アイテムがリスト内のアイテムと等しいかどうかを確認します。したがって、内部的にはhash(a) == hash(b)比較である可能性が最も高くなります。ハッシュが等しい場合、オブジェクト自体もおそらく比較されます。

于 2012-04-18T13:21:13.590 に答える