首頁 > 後端開發 > Python教學 > 為什麼 Python 的「is」運算子對於某些整數會出現異常行為?

為什麼 Python 的「is」運算子對於某些整數會出現異常行為?

Barbara Streisand
發布: 2024-12-27 16:37:11
原創
998 人瀏覽過

Why Does Python's

整數「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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板