is
演算子と ==
演算子の違い
Python では、is
演算子と ==
演算子が異なる目的で使用されます。
is
演算子
-
is
演算子は、オブジェクトの同一性を比較します。すなわち、二つのオブジェクトが同じメモリの場所に存在するかを確認します。 - 主に、変数が同じオブジェクトを指しているかどうかを調べるために使います。
例
a = [1, 2, 3]
b = a
c = [1, 2, 3]
print(a is b) # True - `a` と `b` は同じオブジェクトを指している
print(a is c) # False - `a` と `c` は異なるオブジェクト
- ここでは、
a is b
はTrue
ですが、a is c
はFalse
になります。なぜなら、a
とb
は同じリストオブジェクトを指しており、a
とc
は内容は同じですが異なるオブジェクトだからです。
==
演算子
-
==
演算子は、オブジェクトの値を比較します。つまり、二つのオブジェクトの内容が等しいかどうかを確認します。
例
a = [1, 2, 3]
b = a
c = [1, 2, 3]
print(a == b) # True - `a` と `b` は同じ内容を持つ
print(a == c) # True - `a` と `c` は同じ内容を持つが、オブジェクトは異なる
- ここでは、
a == b
とa == c
はどちらもTrue
です。なぜなら、a
とc
は内容が同じだからです。
違いのまとめ
-
is
はオブジェクトの同一性を比較します(同じメモリ場所にあるか)。 -
==
はオブジェクトの値を比較します(内容が同じか)。
いつ使うか?
-
is
は、変数が同じオブジェクトを指しているかどうかを確認したい場合に使用します。例えば、None
との比較でよく使われます。a = None if a is None: print("a は None です")
-
==
は、オブジェクトの内容が等しいかどうかを調べたい場合に使用します。a = [1, 2, 3] b = [1, 2, 3] if a == b: print("a と b は同じ内容です")