私のエディターは、 を比較するときには警告を表示しますmy_var == None
が、 を使用するときには警告を表示しませんmy_var is None
。
Python シェルでテストを実行し、どちらも有効な構文であることを確認しましたが、エディターではそれがmy_var is None
優先されると表示されているようです。
これは事実でしょうか、もしそうなら、それはなぜでしょうか?
ベストアンサー1
まとめ:
is
オブジェクトのIDをチェックする場合に使用します(例:var
かどうかを確認するNone
)。等価性==
をチェックする場合に使用します(例:と等しいか?)。var
3
説明:
my_var == None
返すカスタムクラスを持つことができますTrue
例えば:
class Negator(object):
def __eq__(self,other):
return not other
thing = Negator()
print thing == None #True
print thing is None #False
is
オブジェクトの同一性をチェックします。オブジェクトは 1 つしかないのでNone
、これを行うとmy_var is None
、それらが実際に同じオブジェクトであるかどうか (単に同等のオブジェクトであるかどうかではなく)をチェックすることになります。
つまり、==
は同等性 (オブジェクトごとに定義されます) をチェックしますが、 はis
オブジェクトの同一性をチェックします。
lst = [1,2,3]
lst == lst[:] # This is True since the lists are "equivalent"
lst is lst[:] # This is False since they're actually different objects