整數「is」運算子的意外行為
Python 中的「is」運算子比較物件標識,測試兩個變數是否引用記憶體中完全相同的物件。但是,在比較整數時,它可能會出現意外行為。
請考慮 Python 2.5.2 中的以下範例:
>>> a = 256 >>> b = 256 >>> a is b True # Expected result >>> a = 257 >>> b = 257 >>> a is b False # Unexpected result
為什麼「is」運算子在比較整數 257 時傳回 False?
答案在於 Python 內部表示小整數的方式。根據 Python 文檔,-5 到 256 之間的整數儲存在預先分配的數組中。當您建立此範圍內的整數時,您實際上獲得了對應數組元素的參考。
這意味著對於 -5 到 256 之間的整數,「is」運算子本質上是比較記憶體位址而不是整數價值。在上面的範例中,a 和 b 都引用數組中的相同元素,因此結果為 True。
但是,對於此範圍之外的整數,「is」運算子的行為符合預期。它比較的是實際的整數值,而不是記憶體位址。
如果需要比較兩個未知類型的對象,無論它們是否是整數,可以使用“id()”函數來獲取他們的內存地址並比較它們:
>>> a = 257 >>> b = 257 >>> id(a) == id(b) False
以上是為什麼 Python 的「is」運算子對於某些整數會出現異常行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!