你真的懂python中的 a+=b 吗?

在python中大部分情况下,a = a+b和a += b效果是相同的。

但也有特殊情况,对于可变类型(列表,字典等),a = a+b和a += b的效果可能不同。

  1. a = a + b

    + 和 - 是一个二元操作符,它会创建一个新列表,包含a和b的元素。然后让变量a引用这个新对象

a = [1, 2, 3]
b = [4, 5, 6]
c = a#c和a引用同一个对象
print("a id:%s %s" %(id(a), a))
print("b id:%s %s" %(id(b), b))
print("c id:%s %s" %(id(c), c))
#a = a + b
a = a + b
print("a = a + b")
print("a id:%s %s" %(id(a), a))
print("b id:%s %s" %(id(b), b))
print("c id:%s %s" %(id(c), c))
#output
a id:2106053105344 [1, 2, 3]
b id:2106053105216 [4, 5, 6]
c id:2106053105344 [1, 2, 3]
a = a + b
a id:2106055605568 [1, 2, 3, 4, 5, 6]#与原a地址不同,创建了一个新的对象
b id:2106053105216 [4, 5, 6]
c id:2106053105344 [1, 2, 3]
  1. a += b

    += 和 -= 是就地操作符,它会就地修改a所引用的对象,在a中添加b的元素,而不是创建一个新对象。

a = [1, 2, 3]
b = [4, 5, 6]
c = a
print("a id:%s %s" %(id(a), a))
print("b id:%s %s" %(id(b), b))
print("c id:%s %s" %(id(c), c))
#a += b
a += b
print("a += b")
print("a id:%s %s" %(id(a), a))
print("b id:%s %s" %(id(b), b))
print("c id:%s %s" %(id(c), c))
#output
a id:2106052498304 [1, 2, 3]
b id:2106051734976 [4, 5, 6]
c id:2106052498304 [1, 2, 3]
a += b
a id:2106052498304 [1, 2, 3, 4, 5, 6]#与原a地址相同,直接修改了原a对象
b id:2106051734976 [4, 5, 6]
c id:2106052498304 [1, 2, 3, 4, 5, 6]#与原a引用同一个对象,所以原a改变,c也跟着改变
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Franda914

有钱的捧个钱场,没钱的点的赞

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值