ホームページ  >  記事  >  バックエンド開発  >  Python での is と == の詳細な分析 (コード付き)

Python での is と == の詳細な分析 (コード付き)

不言
不言転載
2019-03-21 16:03:372481ブラウズ

この記事では、Python の is と == の詳細な分析 (コード付き) を紹介します。一定の参考値があります。必要な友人は参照できます。お役に立てれば幸いです。

Python ではすべてがオブジェクトです。

Python のオブジェクトに含まれる 3 つの基本要素は次のとおりです:

  • id ​​(ID 識別)
  • type (データ型)
  • value(value)

オブジェクトが等しいかどうかを比較するには、== または is を使用できます。

is と == はどちらもオブジェクトの比較と判定に使用されますが、オブジェクトの比較と判定の内容が異なります。具体的な違いを見てみましょう?

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

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

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

最初に例を見てみましょう

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

is は ID 演算子、つまり 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 を使用する必要があります。
もちろん、開発においては値を比較する場面は多々あります。

この記事はここで終了しました。その他のエキサイティングなコンテンツについては、PHP 中国語 Web サイトの Python チュートリアル ビデオ 列に注目してください。

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

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。