Python 字串:不可變實體和賦值混亂
Python 以其字串的不變性而自豪,這意味著字串值一旦建立就無法更改。然而,在嘗試字串串聯時遇到的令人困惑的行為引發了關於這種不變性的問題。
謎題:透過串聯改變不可變字串?
考慮以下程式碼片段:
<code class="python">a = "Dog" b = "eats" c = "treats" print(a, b, c) # Dog eats treats print(a + " " + b + " " + c) # Dog eats treats print(a) # Dog a = a + " " + b + " " + c print(a) # Dog eats treats # Surprise!</code>
程式碼最初初始化三個字串,然後用空格將它們連接起來。令我們驚訝的是,a 的值在重新分配給連接結果後發生了變化。
揭秘:變數重新分配,而不是字串突變
理解這種行為的關鍵在於認識到Python 字串確實是不可變的,而它們的引用是可變的。當我們在最後一行重新分配 a 時,我們並沒有修改現有的字串「Dog」。相反,我們創建一個新字串“Dog eats treats”並將其引用分配給 a。
不變的真理仍然存在
本質上,字串變數儲存字串值的位址(或引用),而不是值本身。我們可以將變數重新指派給不同的位址,但這些位址處的字串值保持不變。
因此,雖然看起來好像我們正在透過連接修改字串,但我們只是創建新字串並重新分配引用。字串的不變性保持不變。
以上是字串連接似乎如何改變 Python 中的不可變字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!