Python 逆引き集 | Python基礎・実行環境:isと==を使い分ける

Python Python
スポンサーリンク
スポンサーリンク

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の比較が直感的に書けるようになり、コードの品質が大きく向上します。

タイトルとURLをコピーしました