You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中的字符串是不可变的吗?为何a += 'matata'能改变变量值?

Python字符串不可变?那为什么a += 'matata'能生效?

嘿,这个问题戳中了很多Python初学者的认知盲区,我来给你掰扯清楚!

首先明确:Python的字符串确实是不可变的

没错,Python里的字符串是不可变类型——意思是,一旦一个字符串对象被创建,它里面的字符就再也不能被直接修改了。比如你试试这段代码:

a = 'hakuna'
a[0] = 'H'  # 运行会直接报错:TypeError: 'str' object does not support item assignment

这就是字符串不可变的直接体现:你没法直接修改原字符串里的任何一个字符。

那a += ' matata'到底是怎么回事?

你看到的“修改”其实是个假象!a += ' matata'本质上等价于a = a + ' matata',它做了这几件事:

  1. 找到变量a当前指向的字符串'hakuna'
  2. 把它和新字符串' matata'拼接,生成一个全新的字符串对象'hakuna matata'
  3. 把变量a的指向从原来的'hakuna'切换到这个新的字符串对象上

原来的'hakuna'字符串其实还躺在内存里,只是变量a不再引用它了,之后会被Python的垃圾回收机制悄悄清理掉。

你可以用id()函数验证这一点——id()会返回对象的内存地址:

a = 'hakuna'
print(id(a))  # 比如输出:140697645012064
a += ' matata'
print(id(a))  # 比如输出:140697645013216

两次输出的地址完全不一样,这就实锤了:前后的a指向的是两个完全不同的字符串对象!

一句话总结

字符串不可变指的是字符串对象本身不能被修改,但变量是可以自由切换指向的——你看到的“修改”,其实是变量换了个新的字符串对象而已~

内容的提问来源于stack exchange,提问作者Mark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:15:49