Python の is 演算子は、2 つの整数の同一性を比較するために使用されます。つまり、オブジェクトがメモリ内の同じオブジェクトを参照しているかどうかをチェックします。ただし、キャッシュされていない整数を扱う場合、is 演算子は予期しない動作をする可能性があります。
関数内の 2 つの整数に対して is 演算子を評価すると、True が返されます。それらが同じオブジェクトを参照していることを示します。ただし、関数の外で同じ is 演算子を評価すると、異なるオブジェクトを参照していることを示す False が返されます。
これは、Python が整数キャッシュを処理する方法が原因です。 [-5, 256] の範囲内の整数の場合、Python は整数オブジェクトをキャッシュし、後続の参照用に再利用します。これは、この範囲内の整数を関数内の複数の変数に割り当てると、それらはすべて同じキャッシュされたオブジェクトを参照するため、is 演算子は True を返すことを意味します。
ただし、関数の外で整数を割り当てると、新しい整数オブジェクトが作成され、キャッシュされたオブジェクトは使用されません。したがって、関数の外で 2 つの整数を比較すると、それらは異なるオブジェクトを参照し、is 演算子は False を返します。
この予期しない動作を回避するには、等価演算子を使用することをお勧めします。 (==) is 演算子ではなく、整数の値を比較します。
以上がPython の関数内と関数外でキャッシュされていない整数に対して「is」演算子の動作が異なるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。