Python では、is 演算子はオブジェクトの等価性ではなく同一性をチェックします。ただし、特定のシナリオでは、以下に示すように、この動作が予期しない場合があります。
<code class="python">def func(): a = 1000 b = 1000 return a is b a = 1000 b = 1000 print(a is b, func()) # (False, True)</code>
is 比較は、関数内では True を返しますが、関数外では False を返します。評価結果は異なりますが、整数 a と b は同じ値であるように見えます。
この動作を理解するには、Python インタープリターによるコード ブロックの解釈が重要です。 Python リファレンス マニュアルによると、対話的に実行される各コマンドは別個のコード ブロックを構成します。以下はブロックとみなされます:
単一のコード ブロック内で、Python は特定のコードをキャッシュします。小さな整数 ([-5, 256] の範囲内) などのオブジェクト。複数の変数が同じ整数リテラルを参照する場合、それらはすべて同じキャッシュされた整数オブジェクトを参照します。ただし、リテラルが異なるコード ブロックで宣言されている場合は、別個の整数オブジェクトが作成されます。
これを説明するために、各ケースのコード オブジェクトを考えてみましょう。
その結果、すべての整数がキャッシュされる func ブロック内で a is b は True と評価され、False と評価されます
次の注意点に注意してください:
Python のコード ブロックの概念を理解することは、解釈するために不可欠です。 ID 比較に関連する予期しない動作。 is は不変オブジェクトのアイデンティティをチェックするのに便利ですが、キャッシュに依存しないため、値の比較には等価演算子 (==) を使用することをお勧めします。
以上がPython の「is」演算子がコード ブロックごとに大きな整数に対して異なる動作をするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。