Python の演算子「==」と「is」の違いの分析

高洛峰
リリース: 2017-03-16 16:21:53
オリジナル
1032 人が閲覧しました

はじめに

2 つの 演算子is と == の違いについて説明する前に、まず Pythonobject に含まれる 3 つの基本要素、つまり id (アイデンティティ識別子)、Python 型について知っておく必要があります。 () (データ型) と value(値)。 is と == は両方ともオブジェクトを比較して判断するために使用されますが、オブジェクトを比較する内容が異なります。具体的な違いを見てみましょう。

Python では 2 つのオブジェクトが等しいかどうかを比較する方法が 2 つあります。簡単に言うと、その違いは次のとおりです。

は 2 つの reference が同じオブジェクトを指しているかどうかを比較することです (参照比較)。

== は、2 つのオブジェクトが等しいかどうかを比較します。

>>> a = [1, 2, 3]
>>> b = a
>>> b is a # a的引用复制给b,他们在内存中其实是指向了用一个对象
True 
>>> b == a # 当然,他们的值也是相等的
True
>>> b = a[:] # b通过a切片获得a的部分,这里的切片操作重新分配了对象,
>>> b is a # 所以指向的不是同一个对象了
False
>>> b == a # 但他们的值还是相等的
True
ログイン後にコピー
実装原理

は、両者が同じオブジェクトかどうかを比較するので、比較されるのはメモリアドレス(IDが同じかどうか)です。

== は値の比較です。 int、str などの不変オブジェクトは、値を直接比較します。 Python に既知のオブジェクトの場合、比較のために eq

関数 が呼び出されます。 (実際には、既知のオブジェクトも組み込みの eq 関数を通じて比較する必要があります)。カスタム オブジェクトの場合、eq 関数が実装されている場合、それが比較に使用されます。実装されていない場合、効果は == と同じです。

对象缓存机制
ログイン後にコピー
Python は比較的小さいオブジェクトをキャッシュします。次に比較的小さいオブジェクトが使用されると、キャッシュ領域内を検索します。新しいメモリは開きませんが、小さいオブジェクトのアドレスを割り当て続けます。オブジェクトを新しい値に変換します。例:

>>> c = 1
>>> d = 1
>>> print(c is d) 
True
 
>>> 1000 is 10**3
False
>>> 1000 == 10**3
True
ログイン後にコピー
代入は計算され、バッファ領域を使用しません。これは最初のコード例からわかります。

strings

の場合、intern関数を使用してバッファの使用を強制できます。

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート