整数を含む "is" 演算子の予期しない動作
Python の "is" 演算子はオブジェクトの同一性を比較し、2 つの変数が参照しているかどうかをテストします。メモリ内のまったく同じオブジェクトです。ただし、整数を比較するときに予期しない動作をする可能性があります。
Python 2.5.2 の次の例を考えてみましょう:
>>> a = 256 >>> b = 256 >>> a is b True # Expected result >>> a = 257 >>> b = 257 >>> a is b False # Unexpected result
整数 257 を比較するときに、「is」演算子が False を返すのはなぜですか?
その答えは、Python が内部的に小さな整数を表現する方法にあります。 Python のドキュメントによると、-5 ~ 256 の整数は事前に割り当てられた配列に格納されます。この範囲で整数を作成すると、実際には対応する配列要素への参照が取得されます。
これは、-5 から 256 までの整数の場合、「is」演算子は基本的に整数ではなくメモリ アドレスを比較することを意味します。価値観。上の例では、a と b は両方とも配列内の同じ要素を参照しているため、結果は True になります。
ただし、この範囲外の整数の場合、「is」演算子は期待どおりに動作します。メモリ アドレスではなく、実際の整数値を比較します。
不明な型の 2 つのオブジェクトを比較する必要がある場合は、それらが整数であるかどうかに関係なく、「id()」関数を使用して取得できます。それらのメモリアドレスを代わりに比較します:
>>> a = 257 >>> b = 257 >>> id(a) == id(b) False
以上がPython の「is」演算子が特定の整数に対して予期しない動作をするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。