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

Pythonの「==」と「is」演算子の違いをわかりやすく解説

「==」と「is」の基本的な違い

Pythonには、オブジェクトを比較するための方法として「==」演算子と「is」演算子の2つがあります。一見すると似たような働きをするように見えますが、この2つはまったく異なる目的を持っています。

「==」(等価演算子)は、2つの変数のが等しいかどうかを比較します。一方、「is」(同一性演算子)は、2つの変数が同じオブジェクト(同じメモリ上の場所)を参照しているかどうかを確認します。

サンプルコード

以下のコードは、「==」と「is」の動作の違いを示すシンプルな例です。ここでは空のリストを扱っています。list1とlist2はそれぞれ独立した別々の空のリストであり、list3はlist1と同じオブジェクトへの参照です。

# == と is 演算子の違いを示すPythonプログラム
# [] は空のリストを表します
list1 = []
list2 = []
list3 = list1

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")

実行結果

True
False
True

結果の解説

1つ目の比較:list1とlist2はどちらも空のリストなので値が等しいと判断され、「==」による比較は「True」を出力します。

2つ目の比較:list1とlist2は値こそ同じですが、別々のオブジェクトとして生成されているため、「is」による比較は「False」となります。

3つ目の比較:list3 = list1 という代入により、list3はlist1と同一のオブジェクトを参照しています。そのため「is」による比較は「True」になります。

使い分けのポイント

実務では、値の比較には「==」を使用し、「is」はNoneとの比較など、オブジェクトの同一性を厳密に確認したい場面でのみ使うことが推奨されています。

# Noneとの比較には is を使うのがPythonのベストプラクティスです
if x is None:
    print("xはNoneです")

このように「==」と「is」を正しく理解して使い分けることで、意図しないバグを防ぎ、より安全で可読性の高いPythonコードを書くことができます。

  1. Python正規表現の特殊文字「.」「?」「*」の違いをわかりやすく解説

    はじめにPythonの正規表現(reモジュール)では、特定の意味を持つ特殊文字がいくつか用意されています。その中でも頻繁に使われるのが「.(ドット)」「?(クエスチョンマーク)」「*(アスタリスク)」の3つです。それぞれ役割が異なるため、違いをしっかり理解しておくことが重要です。特殊文字「.」(ドット)ドットは「任意の1文字」にマッチします。デフォルトのモードでは、改行文字以外のあらゆる1文字と一致します。例えば a.c というパターンは、「abc」「a1c」「a c」などにマッチします。ただし、re.DOTALL フラグを指定した場合は、改行文字も含めたすべての文字にマッチするようになります

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

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