在 Python 2.7 中,字串 ID 的行為可能會令人費解。雖然字串是不可變的,但它們的 ID 似乎會隨著時間而改變。本文探討了此行為背後的原因。
Python 中的 Id Interning
預設情況下,CPython 不會對所有字串進行實習。但是,可以使用 sys.intern() 函數或 PyCode_New 函數的 intern_string_constants() 呼叫來保留滿足特定條件的字串。駐留確保程式碼庫中同一字串的多次出現使用同一個物件。
符合駐留條件的字串包括:
更改 ID
如果字串不符合實習條件,則其 ID 將繼續更改。這是因為 Python 可以自由地為新字串重複使用記憶體位置,從而導致同一文字具有不同的 ID。
Interning 和字串使用
ID 的行為取決於如何使用字串:
連接字串
連接字串也會影響 ID。在優化器限制內連接的字串可能會導致中間字串,從而導致連接字串具有相同的 ID。
結論
Python 2.7 中不可變字串的 ID 為由於實習機制和記憶體重用,並不總是相同的。了解這些因素有助於澄清字串 ID 中明顯的不一致。
以上是為什麼不可變字串 ID 在 Python 2.7 中會改變?的詳細內容。更多資訊請關注PHP中文網其他相關文章!