python的+=和+的区别

今天看到一篇文章关于+= 与 +的区别,

区分其中的区别需要了解到可变对象与不可变对象;应为对于对象是否为不可变对这两种表达式有着一定的区别:

在 Python 中任何对象都有的三个通用属性:唯一标识、类型、值。

唯一标识:用于标识对象的在内存中唯一性,它在对象创建之后就不会再改变,函数 id()可以查看对象的唯一标识

类型:决定了该对象支持哪些操作,不同类型的对象支持的操作就不一样,比如列表可以有length属性,而整数没有。同样地对象的类型一旦确定了就不会再变,函数 type()可以返回对象的类型信息。

对象的值与唯一标识不一样,并不是所有的对象的值都是一成不变的,有些对象的值可以通过某些操作发生改变,值可以变化的对象称之为可变对象(mutable),值不能改变的对象称之为不可变对象(immutable)

不可变对象:

对于不可变对象值一直都是刚开始创建的值,对它做任何操作都会产生一个新的对象

常见的不可变对象有:int、tuple、set、str。(整型、元组、集合、字符串)

如整型,

a=5

a+=5

这里面的a是一个不可变对象,再一开始的时候a创建内存地址并指向5,但在+=操作之后,对象指向了新的对象,改变的内存地址。就产生了新的对象;

可变对象:

可变对象的值可以通过某些操作动态的改变,比如列表对象,可以通过append方法不断地往列表中添加元素,该列表的值就在不断的处于变化中,一个可变对象赋值给两个变量时,他们共享同一个实例对象,指向相同的内存地址,对其中任何一个变量操作时,同时也会影响另外一个变量。但是可变对象的内存地址是不会发生改变的。

x = range(3)

y = x

x.append(3)

y会发生了变化

再python种

+= 操作首先会尝试调用对象的 __iadd__方法,如果没有该方法,那么尝试调用__add__方法

__add__ 方法接收两个参数,返回它们的和,两个参数的值均不会改变。会产生新的对象和内存地址。原来的对象保持不变
__iadd__ 方法同样接收两个参数,就是说它会改变第一个参数的值,因为这需要对象是可变的,所以对于不可变对象没有__iadd__方法。

也就是说要判断是否产生新的对象需要注意进行运算的对象是否为不可变对象

若可变对象继续叠加运算则需要注意使用 x+=t 和 x=x+t 的区别;

若为不可变对象则无需注意之间的区别。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值