首頁 >後端開發 >Python教學 >為什麼不可變字串 ID 在 Python 2.7 中會改變?

為什麼不可變字串 ID 在 Python 2.7 中會改變?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-23 16:22:18313瀏覽

Why Do Immutable String IDs Appear to Change in Python 2.7?

為什麼不可變字串的 ID 會改變?

在 Python 2.7 中,字串 ID 的行為可能會令人費解。雖然字串是不可變的,但它們的 ID 似乎會隨著時間而改變。本文探討了此行為背後的原因。

Python 中的 Id Interning

預設情況下,CPython 不會對所有字串進行實習。但是,可以使用 sys.intern() 函數或 PyCode_New 函數的 intern_string_constants() 呼叫來保留滿足特定條件的字串。駐留確保程式碼庫中同一字串的多次出現使用同一個物件。

符合駐留條件的字串包括:

  • 儲存在代碼物件中的常數
  • 僅包含ASCII 字母、數字或底線的字串
  • 同時分配給標識符和它的值(例如,so = 'so')

更改 ID

如果字串不符合實習條件,則其 ID 將繼續更改。這是因為 Python 可以自由地為新字串重複使用記憶體位置,從而導致同一文字具有不同的 ID。

Interning 和字串使用

ID 的行為取決於如何使用字串:

  • 沒有變數引用: 如果您呼叫多次id('so') 而不將其指派給變量,ID可能會更改,因為保留的字串物件被丟棄。
  • 使用變數參考: 如果將字串指派給一個變數(例如,so = 'so'),ID 將保持不變,因為實習字串綁定到變數。

連接字串

連接字串也會影響 ID。在優化器限制內連接的字串可能會導致中間字串,從而導致連接字串具有相同的 ID。

結論

Python 2.7 中不可變字串的 ID 為由於實習機制和記憶體重用,並不總是相同的。了解這些因素有助於澄清字串 ID 中明顯的不一致。

以上是為什麼不可變字串 ID 在 Python 2.7 中會改變?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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