Pythonの「!=」と「is not」の違いとは?値の比較とオブジェクト同一性の判定方法を解説
Pythonの「!=」演算子とは?
Pythonにおける「!=」は「等しくない(not equal)」を表す比較演算子です。左右のオペランドの値が異なる場合に True を返し、値が等しい場合には False を返します。
>>> (10+2) != 12 # どちらも12なので値は等しい → False False >>> (10+2) == 12 True >>> 'computer' != "computer" # シングルクォートとダブルクォートは同じ文字列 → False False >>> 'computer' != "COMPUTER" # 大文字と小文字は区別されるため別の値 → True True
このように「!=」は、数値や文字列などの中身(値)そのものを比較するために使われます。大文字・小文字の違いも別の値として扱われる点に注意しましょう。
「is not」演算子とは?
一方、「is not」は2つのオブジェクトの id()(メモリ上の識別子)が同じかどうか、つまり同一のオブジェクトを参照しているかを判定する演算子です。同じオブジェクトであれば False を、異なるオブジェクトであれば True を返します。
>>> a = 10 >>> b = a >>> id(a), id(b) (490067904, 490067904) # 同じidを参照している >>> a is not b False >>> a = 10 >>> b = 20 >>> id(a), id(b) (490067904, 490068064) # idが異なる別々のオブジェクト >>> a is not b True
b = a のように代入すると、変数bは変数aと同じオブジェクトを参照するため、a is not b は False になります。一方、それぞれ独立した値を持つ場合はidが異なるため True となります。
まとめ:「!=」と「is not」の使い分け
- 「!=」:2つの値が等しくないかどうかを比較する演算子。数値や文字列などの中身を比べたいときに使用。
- 「is not」:2つのオブジェクトが同一(idが一致)かどうかを判定する演算子。
Noneとの比較など、オブジェクトの同一性を確認したい場面で使用。
一般的に、値の比較には「!=」を使い、x is not None のような特定の場面以外では「is not」による値の比較は避けるのがPythonのベストプラクティスとされています。両者の違いを正しく理解して、適切に使い分けましょう。
-
【初心者向け】Pythonのgetattr()関数とsetattr()関数の違いをわかりやすく解説
getattr()関数とはgetattr()関数は、Pythonの組み込み関数の一つで、オブジェクトが持つ「指定した名前の属性」の値を取得するために使われます。もし属性が見つからない場合は、あらかじめ指定しておいたデフォルト値を返すことができるのが特徴です。基本構文getattr(object, name[, default])パラメータobject:属性を取得したい対象のオブジェクトname:取得したい属性の名前(文字列で指定)default(省略可能):属性が存在しなかった場合に返す代替の値戻り値指定した名前の属性が存在する場合 → その属性の値属性が存在せず、defaultが指定されてい
-
Python正規表現の特殊文字「.」「?」「*」の違いをわかりやすく解説
はじめにPythonの正規表現(reモジュール)では、特定の意味を持つ特殊文字がいくつか用意されています。その中でも頻繁に使われるのが「.(ドット)」「?(クエスチョンマーク)」「*(アスタリスク)」の3つです。それぞれ役割が異なるため、違いをしっかり理解しておくことが重要です。特殊文字「.」(ドット)ドットは「任意の1文字」にマッチします。デフォルトのモードでは、改行文字以外のあらゆる1文字と一致します。例えば a.c というパターンは、「abc」「a1c」「a c」などにマッチします。ただし、re.DOTALL フラグを指定した場合は、改行文字も含めたすべての文字にマッチするようになります