Pythonにおいてis
と==
は、両方とも比較を行うために使用されますが、用途と意味が異なる
isと==の違い
比較演算子 | 説明 | 使用例 |
---|---|---|
is | オブジェクトの同一性を比較。2つのオブジェクトが同じメモリ上の場所を指しているかどうかを確認。 | x is y |
== | 値の等価性を比較。2つのオブジェクトが同じ値を持つかどうかを確認。 | x == y |
is の詳細
- 同一オブジェクトであるかを確認します。
- これは、2つの変数が同じメモリ位置を指しているときのみ
True
になる - 主にシングルトンオブジェクト(
None
やTrue
など)やインスタンス比較につかう
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 と == を使う際の注意点
-
is
はNone
の比較でよく使われます。==
でも比較可能ですが、None
の比較にはis
を使うのが慣習である
x = None
if x is None:
print("xはNoneです") # 推奨される書き方
- イミュータブルなオブジェクト(
int
やstr
など)の場合、isは一見使えるように見えることがありますが、特定の条件で予測しづらい挙動を示すため、==
を使う方が安全である
a = 1000
b = 1000
print(a is b) # False(大きい整数では異なるオブジェクト)
print(a == b) # True(値は同じ)
- 小さな整数(例:-5~256の範囲)はキャッシュされるため、
is
がTrue
になる場合がある
a = 10
b = 10
print(a is b) # True(キャッシュされたオブジェクト)
まとめ
-
is
:2つの変数が同じオブジェクトかどうかを確認する -
==
:2つの変数の値が等しいかどうかを確認する -
None
の比較にはisを使用するのが推奨される - 値の比較には基本的に
==
を使い、オブジェクトの同一性が重要な場合にのみis
を使う
採用拡大中!
テックオーシャンでは一緒に働く情シス担当、データエンジニア仲間を大募集しています!
少しでも興味ある方は、カジュアル面談からでもぜひお気軽にお話ししましょう!
応募はこちらから↓