python:a = a+b与a += b的不同

本文探讨了Python中a+=b与a=a+b两种操作在可变对象与不可变对象上的不同表现。通过示例展示了列表与整数在使用这两种操作时的变化,揭示了对象内存地址及值的变化规律。

python解释器:python3
a = a + b
创建过程是:先创建的a+b的对象放入内存,然后变量a指向了a+b的对象,这事实上已经改变了a原本的指向,指向了新的地址。
a += b
创建过程是:把a原本指向内存地址的对象的值改变成了a+b,能不能改变取决于该对象的值能不能被改变。
对于可变对象类型和不可变对象类型有不同的结果:
可变对象类型:+=改变了原本地址上对象的值,不改变原本的指向地址;=则改变了原本的指向地址,创建了新的对象,并指向新的地址
测试代码:

a = [10]
b = [10]
print('a地址:', id(a))
a = a + b
print('"a=a+=b"的地址:', id(a), 'a的值:', a)

a1 = [10]
b1 = [10]
print('a1地址:', id(a1))
a1 += b1
print('"a1=a1+=b1"的地址:', id(a1), 'a1的值:', a1)

a地址: 2275890970376
"a=a+=b"的地址: 2275890970056 a的值: [10, 10]
a1地址: 2275890970376
"a1=a1+=b1"的地址: 2275890970376 a1的值: [10, 10]

不可改变对象类型:都是改变原本的指向地址,指向新创建的对象地址
测试代码:

a = 10
b = 10
print('a地址:', id(a))
a = a + b
print('"a=a+=b"的地址:', id(a), 'a的值:', a)

a1 = 10
b1 = 10
print('a1地址:', id(a1))
a1 += b1
print('"a1=a1+=b1"的地址:', id(a1), 'a1的值:', a1)

a地址: 1420567536
"a=a+=b"的地址: 1420567856 a的值: 20
a1地址: 1420567536
"a1=a1+=b1"的地址: 1420567856 a1的值: 20

不可变对象类型:数字,字符串,元组
可变对象类型:列表,字典
可变和不可变:指的是内存上某个地址的对象的值能不能改变,能就变,不能就在内存中重新创建一个地址放入新的值
值得提及的是:实践中发现为什么200的内存地址不会变,而300的内存地址会一直变?
经查阅:[-5,256],python已经缓存入内存中了,为了方便提取和增加运行速度吧!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值