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としているため、abは同じリストオブジェクトを参照しています。

イメージすると次のようになります。

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

abには同じ内容のリストが入っていますが、それぞれ別のリストオブジェクトです。


is==の違い

Pythonの初心者が特に注意したいのが、is==の違いです。

==は「値が同じか」を比較する

a = [1, 2, 3]
b = [1, 2, 3]

print(a == b)

実行結果:

True

abは同じ内容なので、==ではTrueになります。


isは「同じオブジェクトか」を比較する

a = [1, 2, 3]
b = [1, 2, 3]

print(a is b)

実行結果:

False

内容は同じでも、abは別々に作られたリストだからです。

つまり、

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

abは中身が同じなので、

a == b

Trueです。

しかし別々のリストなので、

a is b

Falseです。

一方、c = aとしているため、acは同じオブジェクトを参照しています。

そのため、

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の同一性演算子には、isis notがあります。

a is b

は、ab同じオブジェクトかを判定します。

a is not b

は、ab異なるオブジェクトかを判定します。

一方、値そのものを比較するときは==を使います。

比較 使用する演算子
値が等しいか ==
値が異なるか !=
同じオブジェクトか 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では、演算子を暗記するだけでなく、コードを書いて実行結果を確認することが重要です。

プログラミング学習に興味がある方は、まずは無料体験会へ

無料体験会・お申し込みはこちら