==
またはをいつ使用するかを示す簡単な経験則がありますis
。
==
値の等価性のためです。2 つのオブジェクトが同じ値を持っているかどうかを知りたい場合に使用します。
is
は参考程度です。2 つの参照が同じオブジェクトを参照しているかどうかを知りたい場合に使用します。
一般に、何かを単純型と比較するときは、通常、値が等しいかどうかをチェックしているため、 を使用する必要があります==
。たとえば、この例の意図は、xが文字通り 2 と同じオブジェクトを参照している==
かどうかではなく、2 () に等しい値を持っているかどうかを確認することです。x
他に注意すべき点: CPython 参照実装の仕組みにより、is
整数の参照の等価性を誤って比較すると、予期しない一貫性のない結果が得られます。
>>> a = 500
>>> b = 500
>>> a == b
True
>>> a is b
False
これはほぼ予想どおりです。同じ値a
をb
持ちますが、異なるエンティティです。しかし、これはどうですか?
>>> c = 200
>>> d = 200
>>> c == d
True
>>> c is d
True
これは以前の結果と一致しません。何が起きてる?Python のリファレンス実装は、パフォーマンス上の理由から、-5..256 の範囲の整数オブジェクトをシングルトン インスタンスとしてキャッシュします。これを示す例を次に示します。
>>> for i in range(250, 260): a = i; print "%i: %s" % (i, a is int(str(i)));
...
250: True
251: True
252: True
253: True
254: True
255: True
256: True
257: False
258: False
259: False
これは、使用しないもう 1 つの明らかな理由is
です。値の等価性のために誤って使用している場合、動作は実装に任されています。