Python の演算子「==」と「is」の違いの分析
前書き
2 つの演算子 is と == の違いについて説明する前に、まず Python のオブジェクトに含まれる 3 つの基本要素、つまり id (ID)、Python type() (データ型)、および value (価値)。 is と == は両方ともオブジェクトの比較と判定に使用されますが、オブジェクトの比較と判定の内容が異なります。具体的な違いを見てみましょう。
Python では 2 つのオブジェクトが等しいかどうかを比較する方法が 2 つあり、その違いは簡単に言うと次のとおりです。
は 2 つの参照が同じオブジェクトを指しているかどうかを比較する (参照比較) です。
== は 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
代入は計算され、バッファ領域を使用しません。これは最初のコード例からわかります。
文字列の場合、intern 関数を使用してバッファの使用を強制できます。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

正規表現は、プログラミングにおけるパターンマッチングとテキスト操作のための強力なツールであり、さまざまなアプリケーションにわたるテキスト処理の効率を高めます。

UvicornはどのようにしてHTTPリクエストを継続的に聞きますか? Uvicornは、ASGIに基づく軽量のWebサーバーです。そのコア機能の1つは、HTTPリクエストを聞いて続行することです...

この記事では、numpy、pandas、matplotlib、scikit-learn、tensorflow、django、flask、and requestsなどの人気のあるPythonライブラリについて説明し、科学的コンピューティング、データ分析、視覚化、機械学習、Web開発、Hの使用について説明します。

Pythonでは、文字列を介してオブジェクトを動的に作成し、そのメソッドを呼び出す方法は?これは一般的なプログラミング要件です。特に構成または実行する必要がある場合は...
