【初心者向け】Pythonの is と == の違いを整理する
はじめに
Pythonを書いていると、ときどき ==
と is
の違いに戸惑うことがあります。
私自身、最初は「なんとなく同じような意味だろう」と思って使っていたのですが、
実際は まったく異なる意味と用途を持った演算子 です。
本記事では、is
と ==
の違いについて、
「値の比較」と「オブジェクトの同一性」という視点から整理してみます。
==
は「値が同じかどうか」を比較する
1. ==
は、値(内容)が等しいかどうかをチェックする演算子です。
a = [1, 2, 3]
b = [1, 2, 3]
print(a == b) # True
この場合、リスト a
と b
は見た目は同じでも、それぞれ別に作られたものです。
ただし、 リストの中に入っている要素がすべて同じなので、==
では True
になります。
is
は「まったく同じものかどうか」を比較する
2. is
は、ふたつの変数が「まったく同じもの」を見ているかどうかを判定する演算子です。
つまり、a
と b
が 同じ場所にある“ひとつのリスト”を見ているか? を調べたいときに使います。
a = [1, 2, 3]
b = [1, 2, 3]
print(a is b) # False
この場合、a
と b
は同じ値を持っていますが、それぞれ別に作られたリストなので、
is
は False
を返します。
is
が True
になる例
3. is
は、2つの変数が同じリストを指しているときには True
を返します。
a = [1, 2, 3]
b = a
print(a is b) # True
上記コードでは、b = a
によって a
と b
が同じリストを見ている状態になります。
そのため、is
は True
になります。
==
はTrue
でも、is
だとFalse
になる例
4. 実務でもよくあるのが、次のようなケースです。
print([1, 2] == [1, 2]) # True
print([1, 2] is [1, 2]) # False
このふたつのリストは見た目はまったく同じですが、
それぞれ別々に作られているため is
は False
になります。
「値が同じだからといって、同じものとは限らない」
これが==
とis
の大きな違いです。
is
を使う代表的なケース:None
判定
5. Pythonでは、None
を判定するときに is
を使うのが一般的です。
if value is None:
print("値がありません")
これは、None
は Pythonの中で1つだけ存在する“特別な値” だからです。
==
でも比較はできますが、意図を明確に伝えるには is
を使用することが推奨されます。
6. まとめ
比較演算子 | 比較するもの | 主な使いどころ |
---|---|---|
== |
中にある値が等しいか | 値の比較(リスト・文字列・辞書など) |
is |
同じものかどうか |
None 判定、同じ参照の確認 |
おわりに
==
と is
は、一見似たように見えるかもしれませんが、
「値」と「場所(identity)」の違いを意識して使い分けることが大切です。
普段の開発でも、何を比較したいのかをはっきりさせることで、
バグを防ぎ、意図の伝わるコードを書くことができます。
本記事が理解の一助になれば幸いです。
ありがとう!この「おわりに」の流れに自然に溶け込む形で、関連記事を添えるなら、以下のようにリライトするとスムーズで読者も違和感なく次に進められます👇
🔗 関連記事(よく混同されやすいPythonの構文)
Discussion