首頁  >  文章  >  後端開發  >  為什麼「is」運算子對於 Python 中函數內部和外部的非快取整數的行為不同?

為什麼「is」運算子對於 Python 中函數內部和外部的非快取整數的行為不同?

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 運算子用於比較兩個整數的識別對象,這意味著它檢查它們是否引用記憶體中的相同物件。但是,在處理非快取整數時,is 運算子可能會以意想不到的方式運作。


如果對函數內的兩個整數計算 is 運算符,它將傳回 True,表示它們引用同一個物件。但是,如果在函數外部計算相同的 is 運算符,它將傳回 False,表示它們引用不同的物件。


這是因為 Python 處理整數快取的方式。對於 [-5, 256] 範圍內的整數,Python 會快取整數物件並重複使用它們以供後續引用。這意味著當您將這個範圍內的整數分配給函數內的多個變數時,它們都引用同一個快取對象,因此 is 運算子返回 True。


但是,當您在函數外部分配一個整數,它會建立一個新的整數物件並且不使用快取的物件。因此,當您在函數外部比較兩個整數時,它們會引用不同的對象,並且 is 運算子會傳回 False。

為了避免這種意外行為,建議使用相等運算子(==) 來比較整數的值,而不是 is 運算子。

以上是為什麼「is」運算子對於 Python 中函數內部和外部的非快取整數的行為不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn