Python は -5 から 256 までの値の整数キャッシュを維持しますが、このキャッシュは整数の比較に直接影響しません。コンパイルされたコード。
コンパイルされたコードでは、コンパイラはリテラルを分析します。メモリ使用量を最適化するために、等しい定数値を 1 つのオブジェクトにマージします。この動作は、整数だけでなく浮動小数点数にも当てはまります。
次の例を考えてみましょう。
# Interactive >>> a = 257 >>> b = 257 >>> a is b False
インタラクティブ インタプリタでは、各行は個別に解析され、コンパイルされます。したがって、a と b は、同等の値にもかかわらず、異なる PyInt_Object を参照します。
# Compiled $ echo 'a = 257 > b = 257 > print a is b' > test.py $ python test.py True
ファイルからコードをコンパイルするとき、コンパイラーはコード全体を分析し、同一のリテラルをマージできます。これは、この例の a と b が同じ PyInt_Object を指し、is 比較で True が返されることを意味します。
コンパイラの最適化プロセスは、compiler_add_o 関数によって実行されます。辞書を使用して定数を保存します。同一の定数はディクショナリ内の同じスロットを占有し、コンパイルされたバイトコード内で単一の定数オブジェクトになります。
コンパイラのマージ動作は、タプルのような複雑なリテラルには適用されません。またはリスト。含まれる要素はマージされる可能性がありますが、リテラル自体は別個のオブジェクトのままになります。
>>> a = (257, 258) >>> b = (257, 258) >>> a is b False >>> a[0] is b[0] True
Python のコンパイラは、コンパイルされたコード内の同一の定数をマージするなど、メモリ使用量を削減するために大幅な最適化を実行します。整数キャッシュ自体はこれらの最適化に直接影響しませんが、同一の値を含む整数比較は期待どおりに動作し、is および == 比較では値が等しい場合に True になります。
以上がPython の整数キャッシュはコンパイルされたコードの整数比較に影響しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。