ホームページ  >  記事  >  バックエンド開発  >  Python の is と == の違いは何ですか? Python の is と == の違いの概要

Python の is と == の違いは何ですか? Python の is と == の違いの概要

不言
不言転載
2018-10-29 17:26:002776ブラウズ

この記事でわかることは、Python の is と == の違いについてです。 Python における is と == の導入は一定の参考価値があるので、困っている友人は参考にしていただければ幸いです。

Python には多数の演算子があります。今日は、is 演算子と == 演算子の応用における本質的な違いについて説明します。

2 つの演算子 is と == の違いについて説明する前に、Python のオブジェクトに含まれる 3 つの基本要素、つまり id (ID)、type (データ型)、および value (値) について理解する必要があります。 )。

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

==比較演算子と一致演算子の違い

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

例 1.

>>> a = 'cheesezh'
>>> b = 'cheesezh'
>>> a == b
True

は、アイデンティティ演算子とも呼ばれます。この演算子は、オブジェクト間の一意のアイデンティティを比較して決定します。つまり、 IDが同じかどうか。次のリストを比較すると、is アイデンティティ演算子がどのように機能するかがわかります。

>>> x = y = [4,5,6]
>>> z = [4,5,6]
>>> x == y
True
>>> x == z
True
>>> x is y
True
>>> x is z
False
>>>
>>> print id(x)
3075326572
>>> print id(y)
3075326572
>>> print id(z)
3075328140

最初の 3 つの例はすべて True ですが、最後の例はなぜ False なのでしょうか。 x、y、zの値は同じなので、最初の2つがTrueでも問題ありません。なぜ最後のものが False なのかについては、3 つのオブジェクトの ID を見ればわかります。

別の例を見てみましょう。例 3 では、同じ型の a と b の (a==b) は両方とも True ですが、(a is b) は True ではありません。

>>> a = 1 #a和b为数值类型
>>> b = 1
>>> a is b
True
>>> id(a)
14318944
>>> id(b)
14318944
>>> a = 'cheesezh' #a和b为字符串类型
>>> b = 'cheesezh'
>>> a is b
True
>>> id(a)
42111872
>>> id(b)
42111872
>>> a = (1,2,3) #a和b为元组类型
>>> b = (1,2,3)
>>> a is b
False
>>> id(a)
15001280
>>> id(b)
14790408
>>> a = [1,2,3] #a和b为list类型
>>> b = [1,2,3]
>>> a is b
False
>>> id(a)
42091624
>>> id(b)
42082016
>>> a = {'cheese':1,'zh':2} #a和b为dict类型
>>> b = {'cheese':1,'zh':2}
>>> a is b
False
>>> id(a)
42101616
>>> id(b)
42098736
>>> a = set([1,2,3])#a和b为set类型
>>> b = set([1,2,3])
>>> a is b
False
>>> id(a)
14819976
>>> id(b)
14822256

例 3 からわかるように、a is b は数値型および文字列型の場合にのみ True になります。a と b がタプル、リスト、辞書、またはセット型の場合、a は b は間違い。

自分で試して、a=257 と b=257 のときに ID が同じになるかどうかを確認してください。実はパイソン 速度を最適化するために、小さな整数オブジェクト プールが使用され、頻繁な適用と整数のメモリ領域の破壊が回避されます。 Python の小さい整数の定義は [-5, 257), 数値が -5 から 256 までの場合にのみ、ID が等しくなります。この範囲を超えると、機能しません。同様に、文字列オブジェクトにも同様のバッファ プールがあります。当然、それらは一致しません。範囲を超えた場合は等しい。

一般に、a is b が True になるのは、それが数値および文字列で一般オブジェクト プール内の場合のみです。それ以外の場合は、a と b が int、str、tuple、list、dict または set 型の場合です。 、a は b は両方とも False です。

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

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