Python中赋值操作的逻辑

先看代码

在这里插入图片描述
C++和python操作后会得到同样结果,但是两者在PC中的操作其实不同;

(1)python代码在内存中的操作示意图:

在这里插入图片描述

  • 首先内存会为3创建一个数据单元,再让b指向这个单元;然后b+5得到8,内存又会为这个8创建一个数据单元,再让b指向这个单元(b指向的内存地址发生了改变!);
(2)C++代码在内存中的操作示意图:

在这里插入图片描述

  • 首先内存会创建一个int类,并分配对应的数据单元,类名为b,b类中存储数据3,然后b+3则对b类中的数据3加5变成8(b指向的内存地址没有发生改变!

(3)python代码中+=等复合赋值符的逻辑:

在这里插入图片描述

  • 在Python中,如果a是不可变对象(如int),+=和=均会分配并指向新的内存;
  • 如果a是可变对象(如list),则+=是原内存操作,=则会指向新内存;原因是:对于可变对象,+=实际是调用了__iadd__函数,是Python在模拟C/C++中的复合赋值,与=赋值操作并不相同,这点与C/C++有所区别。
    这也是为什么Python中没有++和–这样的自增自减运算符,因为不可变对象无法自增,只能从一个对象指向下一个对象;

结论

  • C++通过操作内存地址而间接操作数据,数据处于被动地位;
    Python则是直接操控数据,数据处于主动地位,变量只是作为一种引用的关系存在,而不再拥有存储的功能;

  • 在C++中,a=a+1和a+=1的效果完全一样,都是在原内存的修改;
    在Python中,如果a是不可变对象,+=和=均会分配并指向新的内存;如果a是可变对象,则+=是原内存操作,=则会指向新内存;

  • 在Python中一切都是对象,数据也是对象,而对象不能被覆盖,也不能被直接销毁(python中有垃圾回收机制来回收不用地对象,比如引用计数机制);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值