「is」運算子對整數的令人困惑的行為
在Python 中,「is」運算子檢查兩個物件是否引用同一個物件記憶中。雖然這通常按預期工作,但它對整數表現出意外的行為,導致開發人員感到困惑。
大整數的意外結果
考慮以下程式碼:
a = 256 b = 256 a is b # True (expected) a = 257 b = 257 a is b # False (unexpected)
為什麼「is」運算子在第二次比較中傳回False ? 257 不等於 257 嗎?
CPython 實作細節
奇怪的行為源自於 CPython(最常見的 Python 解譯器)中微妙的實作細節。對於 -5 到 256 之間的整數,CPython 維護一個整數物件陣列。當您建立此範圍內的整數時,您只需取得陣列中現有物件的參考即可。這表示對於此範圍內的小整數,「is」運算子會檢查它們是否引用陣列中的相同物件。
後果和意義
在上面的例子,當我們將 256 分配給 a 和 b 時,我們從陣列中收到相同的物件。因此,「a is b」的計算結果為 True。然而,當我們將 257 分配給 a 和 b 時,我們創建了兩個不相同的新對象,導致「a is b」返回 False。
替代比較方法
要比較兩個任意物件的相等性,無論其類型如何,您可以使用“==”運算符而不是“is” 。這將檢查物件的值而不是它們的身份。
a = 257 b = 257 a == b # True
請記住,只有當您需要檢查兩個物件是否引用記憶體中完全相同的物件時才應使用「is」運算符,而'=='應該用於比較值。
以上是為什麼 Python 的「is」運算子對於小整數和大整數的行為不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!