PythonIdentity演算子と "u003du003d"と "IS"演算子の違いを学ぶ


この記事は主に、Pythonの重要な演算子(「IDENTITYOPERATOR」)と、ID演算子が比較演算子(u003du003d)とどのように異なるか(そうでないか)を説明するためにキュレーションされています。

IDオペレーター

恒等演算子(“ is” および“ is not” )は、オブジェクトのメモリ位置を比較するために使用されます。オブジェクトがメモリ内に作成されると、一意のメモリアドレスがそのオブジェクトに割り当てられます。

  • ‘==’ compares if both the object values are identical or not.
  • ‘is’ compares if both the object belongs to the same memory location.

3つの文字列オブジェクトName、Name1、およびName2を作成します。文字列オブジェクトのNameとName2は同じ値を保持し、Name1は異なる値を保持します。

これらのオブジェクトを作成すると、舞台裏で何が起こるかというと、そのオブジェクトはメモリ内に作成され、プログラムの存続期間中に使用可能になります。

これで、比較演算子“ u003du003d” を使用して、両方のオブジェクト値が同じであるかどうかを確認できます。比較演算子の出力はブール値(TrueまたはFalse)になります。

2つの値を比較して等しいかどうかを判断したので、恒等演算子がどのように機能するかを見てみましょう。

組み込みの Id()関数は、オブジェクトの「ID」を取得するために使用されます。オブジェクトの存続期間中、オブジェクトに対して一意で一定になる整数。

簡単にするために、これを一意の政府IDまたはEmp IDとして割り当てられていると考えてください。同様に、一意の整数値が各オブジェクトに割り当てられています。

これで、“ is” 演算子を使用して2つのオブジェクト参照を比較できます。

ID演算子を使用してNameとName1またはName2を比較すると、バックエンドで実行されるのは、“ id(Name)u003du003d id(Name2)” を実行するだけです。 id(Name)とid(Name2)はどちらも同じメモリ位置を共有しているため、Trueを返します。

ここで興味深い部分があります。 NameとName1の両方が同じ値を持ち、 id()関数を実行すると同じ整数値を返す前の例を見てください。以下のスクリーンショットの同じ値を共有しているのに、「Name_new」オブジェクトと「Name_le」オブジェクトが同一ではないと思うのはなぜですか。

これは、Pythonデザインの実装によるものです。範囲(-5,256)の整数オブジェクトと20文字以上の文字列オブジェクトを作成すると、同じ値の異なるオブジェクトをメモリに作成する代わりに、これらのオブジェクトはすでに作成されたオブジェクトへのポインタとして機能します。

以下の図解は、この記事でこれまでに見たものの明確なアイデアを提供します。

この記事では、恒等演算子とは何かを見てきました。比較演算子と恒等演算子の使用方法、オブジェクトがメモリ内で作成される方法の実装を設計します。