6

重複の可能性:
「foo is None」と「foo == None」に違いはありますか?

本当に簡単な質問です。

次の違いは何ですか:

if a.b is 'something':

if a.b == 'something':

私の無知を許してください

4

2 に答える 2

5

1 つ目は同一性をチェックし、2 つ目は等価性をチェックします。

例:

を使用した最初の操作は、これらのアイテム、つまり文字列がメモリ内のどこに格納されているかによって結果が変わるis 場合とそうでない場合があります。True

a='this is a very long string'
b='this is a very long string'

a is b
False

チェックすると、id()はそれらが異なる場所に保存されていることを示しています。

id(a)
62751232

id(b)
62664432

文字列が等しいため、2 番目の操作 ( ==) が得られます。True

a == b
True

または(最初の例と比較してください) であるis可能性があることを示す別の例ですが、期待どおりに機能します。TrueFalse==

'3' is '3'
True

これは、上記の例の 2 つの長い文字列とは異なり、これらの短いリテラルの両方が同じメモリ位置に格納されたことを意味します。

'3' == '3'
True

ここで驚くことではありません。

id()isを使用して、メモリ内の同じオブジェクトが参照されているかどうかを判断していると思います(詳細については、以下の @SvenMarnach コメントを参照してください)

于 2012-05-31T11:03:09.873 に答える
3

a is bab同じオブジェクトの場合、 は true です。それらは同等に比較できますが、異なるオブジェクトです。たとえば、次のようになります。

>>> a = [1, 2]
>>> b = [1, 2]
>>> c = b
>>> a is b
False
>>> a is c
False
>>> b is c
True
>>> a == b == c
True
于 2012-05-31T11:04:48.543 に答える