Python
 Computer >> コンピューター >  >> プログラミング >> Python

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」はオブジェクトの同一性を判定します。用途に応じて適切な演算子を選ぶことで、バグの少ない安全なコードを書くことができます。

  1. JavaScriptとPythonのセミコロンの違いは何ですか?

    JavaScriptとPythonにおけるセミコロンの扱いの違いPythonでは、セミコロン(;)は基本的に不要です。文末に付けてもエラーにはなりませんが、通常のコーディングスタイルでは書きません。一方、JavaScriptでもセミコロンは省略可能ですが、明示的に記述するのが良いプラクティスとされており、一部のステートメントでは必須となるケースもあります。セミコロンを書かなかった場合、JavaScriptエンジンによって自動的に挿入されますが、この自動挿入によってコードの意図が変わってしまうことがあります。これを「自動セミコロン挿入(Automatic Semicolon Insertion:

  2. Pythonのre.searchとre.matchの違いとは?正規表現マッチングの使い分けを徹底解説

    Pythonのreモジュールには、正規表現でパターンを検索するためのメソッドがいくつか用意されています。その中でもよく使われるのが re.match() と re.search() の2つです。どちらもマッチオブジェクトを返すという点では似ていますが、検索範囲に重要な違いがあります。 re.match():文字列の先頭だけをチェックする re.match() は、パターンが文字列の先頭で一致した場合にのみマッチを返します。文字列の途中にパターンが存在しても、先頭で一致しなければ結果は None になります。 たとえば、文字列「TP Tutorials Point TP」に対してパターン「TP」