首頁 > 後端開發 > Python教學 > 為什麼不可變的 Python 字串看起來有不斷變化的 ID?

為什麼不可變的 Python 字串看起來有不斷變化的 ID?

Linda Hamilton
發布: 2024-12-01 07:18:11
原創
734 人瀏覽過

Why Do Immutable Python Strings Seem to Have Changing IDs?

了解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。

其他觀察:

  • 將字串指派給變數(例如,so = 'so')會凍結ID,因為Python 為變數名稱及其變數引用相同的字串物件值。
  • 使用外部方法建立的字串可能不遵循這些駐留或最佳化規則。
  • 如果結果符合最佳化限制,連接短字串仍可能導致駐留。

以上是為什麼不可變的 Python 字串看起來有不斷變化的 ID?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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