ホームページ >バックエンド開発 >Python チュートリアル >Python での is と == の違いの分析例

Python での is と == の違いの分析例

Y2J
Y2Jオリジナル
2017-04-21 16:06:451164ブラウズ

Python では、 is は 2 つのオブジェクトが同じオブジェクトであるかどうかをチェックし、 == はそれらが等しいかどうかをチェックします。 非常に簡単です。具体的な例を通して分析しましょう。 Python では、2 つのオブジェクト (変数) が等しいかどうかを比較します。 「is」演算と「==」演算を使用できますが、それらの違いは何ですか? 「is」をいつ使用するのか、「==」をいつ使用するのか?面接中に、多くの受験者が 2 つを明確に説明するのが難しいことがわかりました。そこで、この記事では、「Python の禅」で 2 つを詳しく、わかりやすく比較紹介します。

例を見てみましょう

Xiao Huang は最近とてもお金持ちになり、P90D テスラを買うために大金を費やしました。この車を仮に「Little P」と名付けましょう。この車は隣の Lao Wang の家族の車に似ています。 (車(「Xiao Wang」という名前)は、モデル、外観、価格に関係なく、まったく同じで、同じバッチで生産されます。ここで、「リトル P」と「リトル ワン」は 2 つの同一かつ同等の乗り物 (euqal) であると言えますが、本質的には 2 つの異なるオブジェクトです。ある日、Xiaojun は自分の車に「Aiju」という別のオンライン名を付けました。「Xiao P」というとき、実際には「Aiju」について議論しています。なぜなら、この 2 つの名前は本質的に同じものを指します。ここでは「Little P」と呼びます。 」と「愛珠」は完全に同等(同一)です。

Pythonでは、「==」と「is」の違いをこの例に例えることができます。前者は2つのオブジェクトの値が等しいかどうかを比較する等価性比較です。後者は一貫性です。比較。2 つのオブジェクトのメモリ空間アドレスが同じかどうかを比較します。

明らかに、メモリアドレスが同じであれば、それらの値も同じでなければなりません。したがって、「is」が True を返す場合、「==」も True を返す必要がありますが、その逆は当てはまりません。

話は安いのでコードを見せてください

まずリストオブジェクトを作成し、次にそれに名前 a を割り当て、同じオブジェクトを指すように別の変数 b を定義します。

>>> a = [1, 2, 3]
>>> b = a

a と b の出力値は等しいです。これは、車に 2 つの異なる名前を付けるのと同じように、これら 2 つの変数が同じオブジェクトを指しているためです。

>>> a
[1, 2, 3]
>>> b
[1, 2, 3]

もちろん、is と == は両方とも True を返します。

>>> a == b
True
>>> a is b
True

新しいオブジェクトを作成します。値は同じですが、本質的には 2 つの異なるオブジェクトであり、2 つの異なるメモリ空間にあるため、「is」は False を返します。

>>> c = [1,2,3]
>>> a is c
False

「is」は、比較された 2 つの変数が同じオブジェクトを指している場合にのみ True を返し、「==」は最終的にオブジェクトの eq() メソッドに依存します。本質的に、2 つの変数は「==」で比較されます。操作はオブジェクトの eq() メソッドを呼び出します。例:

>>> class Foo(object):
    def eq(self, other):
      return True

>>> f = Foo()
>>> f == 1
True
>>> f == None
True
>>> f is None
False

カスタム クラス Foo の eq メソッドは常に True を返すため、どのオブジェクトでも "==" は True を返します。 It と None は 2 つの異なるオブジェクトであるため、「is」操作は False を返します。

最後に、このコードと、同じ操作で異なる結果が生じる理由について考えてください

>>> a = 257
>>> b = 257
>>> a is b
False
>>> a = 123
>>> b = 123
>>> a is b
True

概要:

2つの値が同じかどうかを比較したい場合は、==を使用してください。同じオブジェクトかどうかを比較するには、== を使用します。

実際、Python で is によって比較されるオブジェクトは、C 言語のポインターと非常によく似ています。同じアドレスを持つポインターのみが同じポインターです。

以上がPython での is と == の違いの分析例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。