在Python 中,is 運算子檢查物件身分而不是等價性。但是,在某些情況下,此行為可能是意外的,如下所示:
<code class="python">def func(): a = 1000 b = 1000 return a is b a = 1000 b = 1000 print(a is b, func()) # (False, True)</code>
is 比較在函數內傳回 True,但在函數外傳回 False。儘管評估結果不同,整數 a 和 b 似乎具有相同的值。
要理解這種行為,Python 解釋器對程式碼區塊的解釋至關重要。根據Python參考手冊,交互執行的每個命令都構成一個單獨的程式碼區塊。以下內容視為區塊:
在單一程式碼區塊中,Python 快取某些對象,例如小整數(在[-5, 256] 範圍內)。當多個變數引用相同的整數文字時,它們都將引用相同的快取整數物件。但是,如果在不同的程式碼區塊中聲明文字,則會建立不同的整數物件。
為了說明這一點,請考慮每種情況的程式碼對象:
因此,a is b 在 func 區塊中計算為 True,其中所有整數都是緩存,並且在創建單獨物件的區塊外為 False。
請注意以下注意事項:
理解 Python 中程式碼區塊的概念對於解釋涉及身分比較的意外行為至關重要。雖然對於檢查不可變物件的身份很有用,但建議使用相等運算子(==)來比較值,因為它不依賴快取。
以上是為什麼 Python 的「is」運算子對於不同程式碼區塊中的大整數表現不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!