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中文网其他相关文章!