python单变量赋值,字符串赋值的变与不变

本文探讨了Python中列表和字符串在赋值操作时的不同行为。列表赋值相当于地址传递,导致修改原变量会影响到新变量,而单个数字或字符串赋值会产生新对象,不会影响原有变量。由于Python字符串的不可变性,'+'操作会生成新的字符串对象,而非修改原有对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前写过一篇关于python里列表对象的’=’的一个陷阱
今天一个初学python的同学跟我讨论问题的时候,我们把这个问题扩展了一下。

我们知道,对于列表变量来说,赋值等于地址的传递,那么在原先的变量上做修改,同样会反应到被赋值的新变量上来,具体如下:

>>> a=[2]
>>> b=a
>>> a.append(3)
>>> b
[2, 3]

那么,对于单个变量来说,还是这样吗?事实上不是了,如下:

>>> a=2
>>> b=a
>>> a=3
>>> b
2

为什么会不一样呢?不是python里的赋值就是内存里一个对象的地址的传递吗。
事实上,在上面第三部的时候,
a=3 已经产生了一个新的对象,即3被分配给了一个新的地址,这个地址又被传递给了a变量,而之前的地址保存的2还存留在b的变量下面,所以b并没有改变。

同样的,对于字符串呢?我想到,字符串事实上不就是列表吗,所以应该也是跟列表一样的情况,实验结果又打脸了:

b='dddd'
>>> a=b
>>> b=b+'111'
>>> b
'dddd111'
>>> a
'dddd'

没变啊!这又是为什么。

想了一下想起这句话,python里的字符串是不可变的。

这意味着 ‘dddddd’+’111’跟单个数字一样,产生了一个新的对象。
所以会出现这样的结果啦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值