Python 同一性演算子とは?is・is notの使い方を初心者向けに解説

Pythonの「同一性演算子」とは、2つのオブジェクトが同じオブジェクトであるかを判定するための演算子です。
Pythonでは、主に次の2つを使います。
is
is not
この記事では、Python初心者向けに同一性演算子の意味、==との違い、使い方、注意点について解説します。
Pythonの同一性演算子とは?
Pythonの同一性演算子は、2つの変数が同じオブジェクトを参照しているかを調べるために使います。
| 演算子 | 意味 |
|---|---|
is |
同じオブジェクトならTrue |
is not |
同じオブジェクトでなければTrue |
基本的な書き方は次のとおりです。
a is b
または、
a is not b
結果はTrueまたはFalseになります。
isの使い方
isは、2つの変数が同じオブジェクトを参照しているかを判定します。
a = [1, 2, 3]
b = a
print(a is b)
実行結果:
True
b = aとしているため、aとbは同じリストオブジェクトを参照しています。
イメージすると次のようになります。
a ─┐
├──> [1, 2, 3]
b ─┘
そのため、
a is b
はTrueになります。
is notの使い方
is notは、2つの変数が同じオブジェクトではないかを判定します。
a = [1, 2, 3]
b = [1, 2, 3]
print(a is not b)
実行結果:
True
aとbには同じ内容のリストが入っていますが、それぞれ別のリストオブジェクトです。
isと==の違い
Pythonの初心者が特に注意したいのが、isと==の違いです。
==は「値が同じか」を比較する
a = [1, 2, 3]
b = [1, 2, 3]
print(a == b)
実行結果:
True
aとbは同じ内容なので、==ではTrueになります。
isは「同じオブジェクトか」を比較する
a = [1, 2, 3]
b = [1, 2, 3]
print(a is b)
実行結果:
False
内容は同じでも、aとbは別々に作られたリストだからです。
つまり、
a == b
は「中身が同じ?」
a is b
は「まったく同じオブジェクト?」
と考えると分かりやすいでしょう。
isと==の比較
次のコードで違いを確認できます。
a = [10, 20, 30]
b = [10, 20, 30]
c = a
print(a == b)
print(a is b)
print(a == c)
print(a is c)
実行結果:
True
False
True
True
aとbは中身が同じなので、
a == b
はTrueです。
しかし別々のリストなので、
a is b
はFalseです。
一方、c = aとしているため、aとcは同じオブジェクトを参照しています。
そのため、
a is c
はTrueになります。
id()を使うとオブジェクトを確認できる
Pythonには、オブジェクトを識別するためのid()関数があります。
a = [1, 2, 3]
b = a
print(id(a))
print(id(b))
実行すると、同じ番号が表示されます。
140000000000000
140000000000000
※実際の番号は環境によって異なります。
同じオブジェクトなので、id(a)とid(b)が同じになります。
一方、
a = [1, 2, 3]
b = [1, 2, 3]
print(id(a))
print(id(b))
では、通常は異なる番号になります。
Noneの判定にはisを使う
Pythonでisが特に重要なのが、Noneの判定です。
value = None
if value is None:
print("値がありません")
実行結果:
値がありません
Noneかどうかを確認するときは、
value is None
と書くのが一般的です。
逆に、Noneではないことを確認する場合は、
if value is not None:
print("値があります")
と書きます。
なぜNone ==ではなくis Noneなのか?
例えば次のようなコードです。
if value is None:
print("Noneです")
これは「valueがPythonのNoneオブジェクトそのものであるか」を確認しています。
NoneはPythonにおいて特別なシングルトンオブジェクトとして扱われるため、Noneとの比較ではisを使うのがPythonの一般的な書き方です。
したがって、
if value is None:
と覚えておくとよいでしょう。
is not Noneもよく使う
実際のプログラムでは、is not Noneも頻繁に登場します。
name = "Python"
if name is not None:
print(name)
実行結果:
Python
例えば関数の戻り値が存在するか確認するときにも使えます。
result = some_function()
if result is not None:
print(result)
isで文字列や数値を比較してはいけない
初心者がよくやってしまうのが、isを==の代わりに使うことです。
例えば、
name = "Python"
if name is "Python":
print("Pythonです")
このような書き方は避けましょう。
文字列の値を比較したい場合は、
if name == "Python":
print("Pythonです")
とします。
数値の比較にも==を使う
数値を比較するときも基本的には==を使います。
a = 100
b = 100
print(a == b)
実行結果:
True
「値が等しいか」を確認したいのであれば、==を使用します。
a == b
isは「値が同じか」ではなく「同じオブジェクトか」を確認するためのものです。
isは何に使う?
同一性演算子は、主に次のような場面で使います。
1. Noneを判定する
if value is None:
print("値なし")
2. Noneではないことを判定する
if value is not None:
print("値あり")
3. 同じオブジェクトか確認する
a = []
b = a
print(a is b)
このように、isはオブジェクトの同一性を確認するための演算子です。
isと==を覚え分ける方法
初心者は次のように覚えると分かりやすいでしょう。
== → 中身・値が同じ?
is → 同じモノ?
例えば、
a = [1, 2, 3]
b = [1, 2, 3]
の場合、
a == b
は、
「中身は同じ?」
という質問です。
一方、
a is b
は、
「まったく同じリスト?」
という質問になります。
同一性演算子のまとめ
Pythonの同一性演算子には、isとis notがあります。
a is b
は、aとbが同じオブジェクトかを判定します。
a is not b
は、aとbが異なるオブジェクトかを判定します。
一方、値そのものを比較するときは==を使います。
| 比較 | 使用する演算子 |
|---|---|
| 値が等しいか | == |
| 値が異なるか | != |
| 同じオブジェクトか | is |
| 異なるオブジェクトか | is not |
特に、
if value is None:
if value is not None:
はPythonプログラミングで非常によく使う書き方です。
**「==は値の比較、isはオブジェクトの同一性の比較」**と覚えておきましょう。
Pythonの同一性演算子を実際に使って覚えよう
isと==の違いは、説明を読むだけでは分かりにくい部分があります。
実際にコードを書いて、
a = [1, 2, 3]
b = [1, 2, 3]
c = a
print(a == b)
print(a is b)
print(a == c)
print(a is c)
を実行してみると、値の比較とオブジェクトの同一性の違いを確認できます。
Pythonでは、演算子を暗記するだけでなく、コードを書いて実行結果を確認することが重要です。




