Pythonの「等しい」は==を使用しますか?

序文

この記事のテキストと写真はインターネットからのものであり、学習とコミュニケーションのみを目的としています。これらは商用目的ではありません。ご不明な点がございましたら、処理についてお問い合わせください。

PS:Pythonの学習教材が必要な場合は、以下のリンクをクリックして自分で入手できます

Pythonの無料学習資料とグループコミュニケーションの回答クリックして参加


 

最近、ある読者からインタビューの質問があり、関連するコンテンツを詳しく書き留めてほしいとのことでした。いや、今すぐ手配してください。

isと==の違い

とてもシンプルに見えますが、詳細もたくさんあります。今日の記事は、関連する知識の深い理解にあなたを連れて行くことです。

いくつか例を挙げてください

最初に説明すると、多くの友達が理解できないので、最初にいくつかのプログラムを実行します。

>>> x = y = [4,3,1]
>>> z = [4,3,1]
>>> print(x is y)
True
>>> print(x == y)
True
>>> print(x == z)
True
>>> print(x is z)
False

まず、この例を見てみましょう。isまたは==が使用されているかどうかに関係なく、xはTrueを返しますが、xとzの内容は同じです。==を使用してTrueを返しますが、を使用するとTrueが返されます。誤り。

Pythonでは、==は値を比較し、はオブジェクトを比較します。

その中で、Pythonオブジェクトには主にid、value、data typeが含まれています。isの比較では、idが比較されます。

したがって、ここではx、y、zのid値を出力します

>>> print(id(x))
140513337973408
>>> print(id(y))
140513337973408
>>> print(id(z))
140513337973248

xとyのid値を比較すると等しいが、zのid値は異なる。

xとyが同じなのはなぜですか?

Pythonでは、=は割り当てであるだけでなく、参照アドレスも割り当てます。そのため、メモリ内では、xとyが同じオブジェクトを呼び出します。

下の写真を参照してください

 

 

見続けましょう

>>> a = '123'
>>> b = '123'
>>> print(a is b)
True
>>> print(a == b)
True
##############
>>> c = 100
>>> d = 100
>>> print(c == d)
True
>>> print(c is d)
True
##############
>>> a = 1000
>>> b = 1000
>>> print(a is b)
False
>>> print(a==b)
True

これを見て戸惑う友達もいるかもしれませんが…これは…?

まず、文字列が等しい理由についてお話ししましょう。実際、Pythonにはインターンメカニズムがあります。このメカニズムでは、同じ値の文字列オブジェクトが1つだけ保存されます。これは、Pythonの実行効率を向上させるためです。

では、どのように達成されますか?このインターンメカニズムは、文字列ストレージプール(辞書)を維持することによって機能します。この辞書のキーは文字列の値であり、値は文字列の参照アドレスです。

新しい文字列を作成するたびに、文字列プールに移動して同じ文字列値があるかどうかを確認し、存在する場合は、文字列の参照アドレスを直接呼び出します。

あなたがこれを見ていると信じて、あなたはすでに文字列が常に等しい理由を理解しています。

 

 

次に、次の2つの整数型の比較について説明しますが、これはさらに混乱を招きます。

>>> c = 100
>>> d = 100
>>> print(c == d)
True
>>> print(c is d)
True
##############
>>> a = 1000
>>> b = 1000
>>> print(a is b)
False
>>> print(a==b)
True

実際、理解するのは難しいことではありません。Pythonには小整数オブジェクトプールの概念があります。小整数オブジェクトプールは、単に[-5,256]の間隔で作成されたオブジェクトであり、リサイクルされません。

つまり、[-5,256]の範囲の整数を作成すると、最初に同じ値があるかどうかがチェックされ、ある場合はアドレスが直接引用されます。

作成するものがこの範囲内にない場合は、新しいオブジェクトが再作成されるため、そのアドレスは異なっている必要があります。

概要: Pythonでは、小さな整数のオブジェクトプールと文字列のみが既存のアドレスを呼び出し、list、tuple、dictなどの他のオブジェクトは新しいオブジェクトを再作成します。

総括する

Pythonでは、isと==の間にまだいくつかの違いがあり、任意に使用することはできません。

しかし今、私たちは基本的にpycharmなどのIDEでコードを記述します。pycharmでは、値が[-5,256]の範囲にあるかどうかに関係なく、値が等しい限り、2つは完全になります。等しい。したがって、ここでは特別な注意が必要です。

おすすめ

転載: blog.csdn.net/pythonxuexi123/article/details/112911497