ホームページ > バックエンド開発 > Python チュートリアル > Python の「is」演算子が特定の整数に対して予期しない動作をするのはなぜですか?

Python の「is」演算子が特定の整数に対して予期しない動作をするのはなぜですか?

Barbara Streisand
リリース: 2024-12-27 16:37:11
オリジナル
998 人が閲覧しました

Why Does Python's

整数を含む "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 サイトの他の関連記事を参照してください。

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