ホームページ  >  記事  >  バックエンド開発  >  Python の関数内と関数外でキャッシュされていない整数に対して「is」演算子の動作が異なるのはなぜですか?

Python の関数内と関数外でキャッシュされていない整数に対して「is」演算子の動作が異なるのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-02 16:42:29612ブラウズ

Why does the `is` operator behave differently with non-cached integers inside and outside functions in Python?

キャッシュされていない整数に対して is 演算子が予期しない動作をする


Python の is 演算子は、2 つの整数の同一性を比較するために使用されます。つまり、オブジェクトがメモリ内の同じオブジェクトを参照しているかどうかをチェックします。ただし、キャッシュされていない整数を扱う場合、is 演算子は予期しない動作をする可能性があります。


関数内の 2 つの整数に対して is 演算子を評価すると、True が返されます。それらが同じオブジェクトを参照していることを示します。ただし、関数の外で同じ is 演算子を評価すると、異なるオブジェクトを参照していることを示す False が返されます。


これは、Python が整数キャッシュを処理する方法が原因です。 [-5, 256] の範囲内の整数の場合、Python は整数オブジェクトをキャッシュし、後続の参照用に再利用します。これは、この範囲内の整数を関数内の複数の変数に割り当てると、それらはすべて同じキャッシュされたオブジェクトを参照するため、is 演算子は True を返すことを意味します。


ただし、関数の外で整数を割り当てると、新しい整数オブジェクトが作成され、キャッシュされたオブジェクトは使用されません。したがって、関数の外で 2 つの整数を比較すると、それらは異なるオブジェクトを参照し、is 演算子は False を返します。


この予期しない動作を回避するには、等価演算子を使用することをお勧めします。 (==) is 演算子ではなく、整数の値を比較します。

以上がPython の関数内と関数外でキャッシュされていない整数に対して「is」演算子の動作が異なるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。