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