🔖

【初心者向け】Pythonの is と == の違いを整理する

に公開

はじめに

Pythonを書いていると、ときどき ==is の違いに戸惑うことがあります。

私自身、最初は「なんとなく同じような意味だろう」と思って使っていたのですが、
実際は まったく異なる意味と用途を持った演算子 です。

本記事では、is== の違いについて、
「値の比較」と「オブジェクトの同一性」という視点から整理してみます。

1. == は「値が同じかどうか」を比較する

== は、値(内容)が等しいかどうかをチェックする演算子です。

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

print(a == b)  # True

この場合、リスト ab見た目は同じでも、それぞれ別に作られたものです。
ただし、 リストの中に入っている要素がすべて同じなので、== では True になります。

2. is は「まったく同じものかどうか」を比較する

is は、ふたつの変数が「まったく同じもの」を見ているかどうかを判定する演算子です。
つまり、ab同じ場所にある“ひとつのリスト”を見ているか? を調べたいときに使います。

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

print(a is b)  # False

この場合、ab同じ値を持っていますが、それぞれ別に作られたリストなので、
isFalse を返します。

3. isTrue になる例

is は、2つの変数が同じリストを指しているときには True を返します。

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

print(a is b)  # True

上記コードでは、b = a によって ab同じリストを見ている状態になります。
そのため、isTrue になります。

4. ==Trueでも、is だとFalseになる例

実務でもよくあるのが、次のようなケースです。

print([1, 2] == [1, 2])  # True
print([1, 2] is [1, 2])  # False

このふたつのリストは見た目はまったく同じですが、
それぞれ別々に作られているため isFalse になります。

「値が同じだからといって、同じものとは限らない」
これが ==is の大きな違いです。

5. is を使う代表的なケース:None 判定

Pythonでは、None を判定するときに is を使うのが一般的です。

if value is None:
    print("値がありません")

これは、NonePythonの中で1つだけ存在する“特別な値” だからです。
== でも比較はできますが、意図を明確に伝えるには is を使用することが推奨されます。

6. まとめ

比較演算子 比較するもの 主な使いどころ
== 中にある値が等しいか 値の比較(リスト・文字列・辞書など)
is 同じものかどうか None 判定、同じ参照の確認

おわりに

==is は、一見似たように見えるかもしれませんが、
「値」と「場所(identity)」の違いを意識して使い分けることが大切です。

普段の開発でも、何を比較したいのかをはっきりさせることで、
バグを防ぎ、意図の伝わるコードを書くことができます。

本記事が理解の一助になれば幸いです。

ありがとう!この「おわりに」の流れに自然に溶け込む形で、関連記事を添えるなら、以下のようにリライトするとスムーズで読者も違和感なく次に進められます👇


🔗 関連記事(よく混同されやすいPythonの構文)

Discussion