ホームページ  >  記事  >  バックエンド開発  >  Pythonのisと==記号の違い

Pythonのisと==記号の違い

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼オリジナル
2019-06-24 11:48:042791ブラウズ

Python ではすべてがオブジェクトです。 Python のオブジェクトに含まれる 3 つの基本要素は、id (ID)、type (データ型)、および value (値) です。 == または is を使用して、オブジェクトが等しいかどうかを比較できます。 is と == は両方ともオブジェクトを比較および判定するために使用されますが、オブジェクトを比較および判定する内容が異なります。具体的な違いを見てみましょう?

Pythonのisと==記号の違い

は、2 つのオブジェクトの ID 値が等しいかどうか、つまり 2 つのオブジェクトが同じインスタンスであるかどうかを比較します。オブジェクト。同じメモリアドレスを指しているかどうか。

== 比較されるのは 2 つのオブジェクトの内容が等しいかどうかです。デフォルトでは、オブジェクトの __eq__ メソッドが呼び出されます。

== は Python 標準演算子の中の比較演算子で、2 つのオブジェクトの値が等しいかどうかを比較して判断するために使用されます。

関連する推奨事項: 「Python ビデオ チュートリアル

まず例を見てみましょう

>>> a = [1, 2, 3]
>>> b = a
>>> b is a
True
>>> b == a
True
>>> b = a[:]
>>> b is a
False
>>> b == a
True

は恒等演算子とも呼ばれ、id です彼らは同じですか。

下のコードを見てください。変数 a と b の ID は異なるため、b == a は True、b は a は False です。

もう一度 ID を見てみましょう。 :

>>> id(a)
4364243328
>>>
>>> id(b)
4364202696

と == がまったく同じ結果になるのはどのような場合ですか?

>>> a = 256
>>> b = 256
>>> a is b
True
>>> a == b
True
>>> a = 1000
>>> b = 10**3
>>> a == b
True
>>> a is b
False
>>>

つまり、数値の型はまったく同じではありません。

では、なぜ 256 では同じなのに、1000 では異なるのでしょうか?

パフォーマンスを考慮しており、Python は多くの内部最適化作業を行っています。整数オブジェクトの場合、Python は頻繁に使用される整数オブジェクトをキャッシュし、small_ints と呼ばれるリンク リストに保存します。Python では、ライフ サイクル全体で、これらの整数オブジェクトを参照する必要がある場所では、新しいオブジェクトは作成されなくなり、キャッシュ内のオブジェクトが直接参照されます。

Python は、頻繁に使用される可能性のあるこれらの小さなオブジェクトを small_ints の範囲 [-5, 256] に配置します。小さな整数を使用する必要があるときはいつでも、ここからそれらを取得してください。新しいオブジェクトを一時的に作成するためです。

>>> c = 'miracle.young'
>>> d = 'miracle.young'
>>> c is d
False
>>> c == d
True
>>> c = 'miracleyoung'
>>> d = 'miracleyoung'
>>> c is c
True
>>> c == d
True

つまり、文字列型はまったく同じではありません。これはインタープリタの実装に関連しています。

>>> a = (1,2,3) # a和b为元组类型
>>> b = (1,2,3)
>>> a is b
False
>>> a = [1,2,3] # a和b为list类型
>>> b = [1,2,3]
>>> a is b
False
>>> a = {'miracle':100,'young':1} # a和b为dict类型
>>> b = {'miracle':100,'young':1}
>>> a is b
False
>>> a = set([1,2,3]) # a和b为set类型
>>> b = set([1,2,3])
>>> a is b
False

したがって、変数が数値、文字列、タプル、リスト、または辞書である場合、is と == は同じではなく、同じ意味で使用することはできません。値を比較する場合は == を使用し、同じメモリアドレスであるかどうかを比較する場合は is を使用する必要があります。

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

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