Python 字串的不變性意味著它們一旦創建就無法更改。然而,由 id() 函數表示的物件標識對於字串來說可能會發生變化,從而導致混亂。
一般來說,字串的 id()每次呼叫時都會發生變化,即使對於相同的字串文字也是如此。這是因為 Python 不保證預設實習所有字串。
id('so') 140614155123888 id('so') 140614155123848 id('so') 140614155123808
但是,也有例外。滿足以下條件的字串將被保留並保持相同的id():
將字串指派給變數可以影響其id() 行為。當變數引用字串時,Python 透過使用內部版本將字串的值儲存在記憶體中一次來優化效能。
so = 'so' id('so') # Now references the same interned string as 'so' 140614155123728
Python 內部使用一個函數來稱為 intern_string_constants() 的內部字串。此函數適用於滿足前面提到的條件的字串(例如,範例中的“hello”)。
Python 的編譯器和最佳化器也在實習中發揮作用。程式碼物件工廠函數可以保留任何可以表示為有效標識符的字串(例如,第二個範例中的“so”)。此外,窺視孔或 AST 優化器可以折疊涉及常數的簡單表達式,從而產生中間結果。
雖然 Python 的字串是不可變的,但它們的 id() 可以改變,取決於以下因素:實習、變數範圍和最佳化器行為。實習有助於優化記憶體使用和效能,了解其行為以避免潛在的混亂非常有價值。
以上是為什麼 Python 的 id() 會改變不可變字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!