前書き
Pythonにおける比較演算子として==演算子とis演算子があります。
これらは混同されがちですが、その明確な違いについてメモしておこうと思います。
結論
==演算子はオブジェクトの等価性を比較し
is演算子をオブジェクトの同一性を比較する
説明
==演算子
==演算子は、オブジェクトの値が等しいかどうかを比較します。
つまり、オブジェクトが同じ内容であるかどうかをチェックします。
例えば、a == b
は、aとbの値が等しい場合にTrueを返します。
is演算子
is演算子は、オブジェクトの同一性を比較します。
つまり、オブジェクトが同じメモリ位置を指しているかどうかをチェックします。
例えば、a is b
は、aとbが同じオブジェクトを指している場合にTrueを返します。
確認
下記の例では?の箇所に==もしくはisが入ります。
どちらが適切でしょうか。
例1
a = [1, 2, 3]
b = a
if a ? b:
print("Same object")
else:
print("Different objects")
解1
この例の場合、同じオブジェクトであるかを確認しています。
よって、==
が適切です。
a = [1, 2, 3]
b = a
if a == b:
print("Same object")
else:
print("Different objects")
例2
def check_none(value):
if value ? None:
print("Value is None")
else:
print("Value is not None")
check_none(None)
解2
NoneはPythonにおいて「値が存在しないこと」を示す特別なオブジェクトであり、変数が初期化されていない場合や関数が値を返さない場合に自動的に設定されます。
Pythonではis演算子を使ってNoneオブジェクトを判定することが一般的です。
よって、is
が適切です。
def check_none(value):
if value is None:
print("Value is None")
else:
print("Value is not None")
check_none(None)
まとめ
==演算子は、オブジェクトの内容が等しいかどうかを比較する。
is演算子は、オブジェクトのメモリ番地が等しいかどうかを比較する。
コードやテキストに正確性について十分気を付けていますが、誤りや修正点などがあればお気軽にコメントください。