了解Python 中不可變字串的不斷變化的ID
在Python 中,不可變字串物件通常由於字串駐留等因素而具有不斷變化的ID 、記憶體位置重複使用和程式碼最佳化。雖然不變性顯示ID 不變,但已觀察到以下行為:
原始觀察:
id('so') # Changes on every call
更改ID:
此行為是由於CPython 中缺乏保證的字串駐留而導致的。 Python 並不總是實習字串,因此重複呼叫 id('so') 可能會產生不同的 ID。
記憶體位置重複使用:
Python 可以重複使用記憶體位置新的字串對象,即使對於不同的字串也會偶爾導致 ID 匹配。這是不可預測的,並且取決於記憶體使用情況。
程式碼最佳化:
Python 最佳化器可能會在編譯時折疊常數表達式(例如,'foo' 'bar'),將結果字串儲存在單一記憶體位置中。這會導致這些表達式的 ID 一致。
異常:
使用 ASCII 字母、數字或底線的常數字串由 Python 編譯器保留。因此,具有相同字元的後續文字將重複使用相同的內部字串對象,從而產生一致的 ID。
其他觀察:
以上是為什麼不可變的 Python 字串看起來有不斷變化的 ID?的詳細內容。更多資訊請關注PHP中文網其他相關文章!