is と == を使い分ける
Pythonを学び始めた多くの人が最初に戸惑うポイントが 「is と == の違い」 です。 どちらも「比較」に使われますが、役割はまったく異なります。 この違いを正しく理解すると、バグを大幅に減らし、安全で読みやすいコードが書けるようになります。
ここでは、初心者向けにステップバイステップで丁寧に解説し、例題・テンプレートを交えて実務レベルで使えるように説明します。
is と == の違い(最重要ポイント)
Pythonでは次のように使い分けます。
- ==:値が等しいかどうかを比較する(value equality)
- is:同じオブジェクトかどうかを比較する(identity equality)
この違いを理解することが、Pythonの比較の基礎になります。
値の比較(==)
== は「中身が同じかどうか」を比較します。
a = [1, 2, 3]
b = [1, 2, 3]
a == b # True(中身が同じ)
a is b # False(別のオブジェクト)
Python深掘り
リストは同じ内容でも、別々に作られた場合は別のオブジェクトです。 そのため == は True でも、is は False になります。
オブジェクトの比較(is)
is は「同じオブジェクトかどうか」を比較します。
x = None
y = None
x is y # True(None は唯一のオブジェクト)
Python深掘り
Pythonでは None は唯一のオブジェクトとして扱われるため、 is を使うのが正しい書き方です。
ステップバイステップで理解する is と ==
ステップ1:値の比較
10 == 10 # True
"abc" == "abc" # True
Pythonステップ2:オブジェクトの比較
a = [1, 2]
b = a
a is b # True(同じオブジェクト)
Pythonステップ3:None の比較(is を使う)
value = None
if value is None:
print("値がありません")
Pythonステップ4:文字列の比較(== を使う)
name = "Taro"
if name == "Taro":
print("一致しました")
Python実務でよく使う is と == の使い分け
None の判定(is を使う)
if result is None:
print("結果がありません")
Python値の一致確認(== を使う)
if status == "OK":
print("成功しました")
Pythonオブジェクトの同一性確認(is を使う)
if obj is cached_obj:
print("キャッシュを利用します")
Python数値や文字列の比較(== を使う)
if age == 20:
print("20歳です")
Python初心者がつまずくポイント(深掘り)
① None の比較に == を使ってしまう
if value == None: # ❌ 推奨されない
Python理由:None は唯一のオブジェクトなので、is を使うべきです。
② 同じ値でも is が False になる
a = [1, 2]
b = [1, 2]
a is b # False(別オブジェクト)
Python③ 小さな整数や短い文字列は is が True のことがある
Pythonは内部で一部の値を「再利用(intern)」します。
a = 10
b = 10
a is b # True のことがある
Pythonしかし、これは仕様に依存するため 値の比較には必ず == を使うべき です。
セキュリティ視点での is と == の使い分け
正しい比較はセキュリティにも影響します。
① None チェックを誤ると異常系を見逃す
if response.get("data") is None:
print("データがありません")
Python② オブジェクトの同一性を確認することで安全性が上がる
キャッシュや設定オブジェクトの比較に is を使うと、意図しない値の混入を防げます。
③ 値比較を is で行うとバグの原因
if user_input is "OK": # ❌
Pythonこれはセキュリティチェックの誤判定につながります。
is と == のテンプレート(そのまま使える)
None 判定テンプレート
if value is None:
...
Python値の比較テンプレート
if value == expected:
...
Pythonオブジェクト同一性テンプレート
if obj is target:
...
Python不一致テンプレート
if value != expected:
...
Python実践例
例1:ユーザー検索
user = database.get(id)
if user is None:
print("ユーザーが見つかりません")
Python例2:設定値の確認
if config["mode"] == "debug":
print("デバッグモードです")
Python例3:キャッシュ利用
if data is cached_data:
print("キャッシュを使用します")
Pythonまとめ
- == は「値が同じか」を比較する
- is は「同じオブジェクトか」を比較する
- None の比較は必ず is を使う
- 値の比較は必ず == を使う
- 正しい使い分けはバグ防止・セキュリティ向上につながる
この違いを理解すると、Pythonの比較が直感的に書けるようになり、コードの品質が大きく向上します。
