71
46

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonのisと==の違い

Last updated at Posted at 2024-10-18

Pythonにおいてis==は、両方とも比較を行うために使用されますが、用途と意味が異なる

isと==の違い

比較演算子 説明 使用例
is オブジェクトの同一性を比較。2つのオブジェクトが同じメモリ上の場所を指しているかどうかを確認。 x is y
== 値の等価性を比較。2つのオブジェクトが同じ値を持つかどうかを確認。 x == y

is の詳細

  • 同一オブジェクトであるかを確認します。
  • これは、2つの変数が同じメモリ位置を指しているときのみTrueになる
  • 主にシングルトンオブジェクト(NoneTrueなど)やインスタンス比較につかう
a = [1, 2, 3]
b = a  # bはaと同じオブジェクトを参照

print(a is b)  # True(同じオブジェクトを参照)
print(a == b)  # True(値も等しい)

== の詳細

  • 値が等しいかどうかを確認します。
  • 2つのオブジェクトが異なるメモリ位置にあっても、内容が同じであればTrueを返す
a = [1, 2, 3]
b = [1, 2, 3]  # bは新たなリストを生成

print(a is b)  # False(異なるオブジェクト)
print(a == b)  # True(値は等しい)

is と == を使う際の注意点

  • isNoneの比較でよく使われます。==でも比較可能ですが、Noneの比較にはisを使うのが慣習である
x = None

if x is None:
    print("xはNoneです")  # 推奨される書き方
  • イミュータブルなオブジェクト(intstrなど)の場合、isは一見使えるように見えることがありますが、特定の条件で予測しづらい挙動を示すため、==を使う方が安全である
a = 1000
b = 1000

print(a is b)  # False(大きい整数では異なるオブジェクト)
print(a == b)  # True(値は同じ)

  • 小さな整数(例:-5~256の範囲)はキャッシュされるため、isTrueになる場合がある
a = 10
b = 10

print(a is b)  # True(キャッシュされたオブジェクト)

まとめ

  • is:2つの変数が同じオブジェクトかどうかを確認する
  • ==:2つの変数の値が等しいかどうかを確認する
  • Noneの比較にはisを使用するのが推奨される
  • 値の比較には基本的に==を使い、オブジェクトの同一性が重要な場合にのみisを使う

採用拡大中!

テックオーシャンでは一緒に働く情シス担当、データエンジニア仲間を大募集しています!

少しでも興味ある方は、カジュアル面談からでもぜひお気軽にお話ししましょう!

応募はこちらから↓

71
46
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
71
46

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?