Pythonの「==」と「is」演算子の違いを徹底解説!値の比較と同一性の判定
Pythonにはオブジェクトを比較するための方法として、「==」演算子と「is」演算子の2つがあります。一見似ているように見えますが、この2つはまったく異なる目的で使われるため、その違いを正しく理解することが重要です。
== 演算子とは(値の等価性を比較)
「==」演算子は、2つのオブジェクトの値が等しいかどうかを比較します。つまり、中身のデータが同じであれば、たとえ別々のオブジェクトであってもTrueを返します。
is 演算子とは(同一性を比較)
一方、「is」演算子は、2つのオペランドが同じオブジェクトであるかどうか(同一性)を比較します。メモリ上のIDが一致するかどうかを確認するため、値が同じでも別々のオブジェクトであればFalseになります。
サンプルコードで違いを確認しよう
以下のPythonプログラムを実行すると、両者の違いが明確にわかります。
list1 = [1]
list2 = [1]
list3 = list1
print(id(list1))
print(id(list2))
if (list1 == list2):
print("True")
else:
print("False")
if (list1 is list2):
print("True")
else:
print("False")
if (list1 is list3):
print("True")
else:
print("False")
実行結果
140380664377096 140380664376904 True False True
結果の解説
list1 == list2 → True
list1とlist2はどちらも[1]という同じ値を持っているため、「==」による比較ではTrueとなります。
list1 is list2 → False
id()の出力を見ると、list1とlist2は異なるメモリアドレスを持っています。つまり別々のオブジェクトなので、「is」による比較ではFalseになります。
list1 is list3 → True
list3 = list1という代入により、list3はlist1と同じオブジェクトへの参照を持っています。そのため「is」による比較ではTrueとなります。
使い分けのポイント
- 値の中身を比較したい場合は「==」を使う
- Noneとの比較など、同一性を確認したい場合に「is」を使う(例:x is None)
- 数値や文字列と「is」を比較に使うのは避けましょう。実装の詳細により挙動が変わる可能性があります
このように、「==」は値の等価性、「is」はオブジェクトの同一性を判定します。用途に応じて適切な演算子を選ぶことで、バグの少ない安全なコードを書くことができます。
-
JavaScriptとPythonのセミコロンの違いは何ですか?
JavaScriptとPythonにおけるセミコロンの扱いの違いPythonでは、セミコロン(;)は基本的に不要です。文末に付けてもエラーにはなりませんが、通常のコーディングスタイルでは書きません。一方、JavaScriptでもセミコロンは省略可能ですが、明示的に記述するのが良いプラクティスとされており、一部のステートメントでは必須となるケースもあります。セミコロンを書かなかった場合、JavaScriptエンジンによって自動的に挿入されますが、この自動挿入によってコードの意図が変わってしまうことがあります。これを「自動セミコロン挿入(Automatic Semicolon Insertion:
-
Pythonのre.searchとre.matchの違いとは?正規表現マッチングの使い分けを徹底解説
Pythonのreモジュールには、正規表現でパターンを検索するためのメソッドがいくつか用意されています。その中でもよく使われるのが re.match() と re.search() の2つです。どちらもマッチオブジェクトを返すという点では似ていますが、検索範囲に重要な違いがあります。 re.match():文字列の先頭だけをチェックする re.match() は、パターンが文字列の先頭で一致した場合にのみマッチを返します。文字列の途中にパターンが存在しても、先頭で一致しなければ結果は None になります。 たとえば、文字列「TP Tutorials Point TP」に対してパターン「TP」