Pythonのisによるオブジェクト同一性の判定と使い方をわかりやすく解説

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

isの概要

オブジェクトの同一性判定 Python予約語

is

概要 is は、2つの変数が同じオブジェクト(メモリ上の同じアドレス)を指しているかどうかを判定するための比較演算子です。

わかりやすく説明 is は「この変数とあの変数は同じものを指しているか?」を調べるときに使います。例えば、2つの変数がまったく同じオブジェクトを参照しているかどうかを確認することができます。

  • is は、2つのオブジェクトが同一のメモリアドレスを持つかを判定します。
  • 通常の比較(==)は「値の等価性」を比較するのに対し、is は「オブジェクトの同一性」を比較します。
  • 主に None との比較や、シングルトンオブジェクト(例: True, False, None)の判定に使用されます。

isの基本的な使い方

以下の例では、2つの変数が同じオブジェクトを指しているかどうかを判定します。

# is を使ったオブジェクトの同一性判定
a = [1, 2, 3]
b = a  # a の参照を b にコピー

print(a is b)  # True(同じオブジェクト)
  • b = a により、ba と同じオブジェクトを参照。
  • a is bTrue となります(同じメモリアドレス)。

isと==の違い

is はオブジェクトの同一性を、== は値の等価性を比較します。

# is と == の違い
a = [1, 2, 3]
b = [1, 2, 3]

print(a == b)  # True(値は等しい)
print(a is b)  # False(異なるオブジェクト)
  • a == b はリストの値を比較し、等しいため True
  • a is b はメモリアドレスが異なるため False

isを使ったNoneの判定

isNone との比較によく使用されます。

# None の判定に is を使用
x = None

if x is None:
    print("x は None です")
  • is None を使うことで、変数が None かどうかを正確に判定。
  • == None でも動作しますが、is の方がより推奨されます。

isの応用例(シングルトンオブジェクトの判定)

Pythonの True, False, None などのシングルトンオブジェクトは、is で比較するのが一般的です。

# シングルトンオブジェクトの判定
x = True
y = True

print(x is y)  # True(同じオブジェクト)
  • Pythonでは True, False, None は常に同じオブジェクトを参照します。
  • そのため、x is yTrue になります。

isの使用上の注意点

  • is はオブジェクトの同一性を比較する: 値が同じでも、異なるオブジェクトなら False になります。
  • シングルトンオブジェクトには is を使う: None との比較には is を使うのが推奨されます。
  • ミュータブルなオブジェクトに注意: リストや辞書などの変更可能なオブジェクトは、コピーされると異なるオブジェクトになります。

isのよくある質問

Q: is を使うべきケースは?
A: None との比較や、シングルトンオブジェクトの判定時に使用するのが適切です。
Q: is と == の違いは?
A: is はオブジェクトの同一性を比較し、== は値の等価性を比較します。
Q: 文字列や数値で is を使うとどうなる?
A: Pythonは小さい整数や短い文字列をキャッシュするため、isTrue になる場合もありますが、必ずしも保証されるわけではありません。

まとめ

is は、2つの変数が同じオブジェクトを指しているかを判定するための演算子です。

  • is はオブジェクトの同一性を比較し、メモリアドレスが同じかを判定します。
  • == は値の等価性を比較するため、異なるオブジェクトでも同じ値なら True になります。
  • None との比較には is を使用するのが推奨されます。

適切に is を活用し、オブジェクトの同一性を正しく判定しましょう。