Python中表达式x += y和x = x+y 的区别详解


Posted in Python onJune 20, 2017

前言

本文主要给大家介绍的是关于Python中表达式x += y和x = x+y 区别的相关内容,分享出来供大家参考学习,下面来看看详细的介绍:

直接看下面代码:

x +=y

In [66]: id(a)
Out[66]: 4476839480

In [67]: id(b)
Out[67]: 4476839480

In [68]: a = [1, 2, 3]

In [69]: b = a

In [70]: id(a)
Out[70]: 4477149984

In [71]: id(b)
Out[71]: 4477149984

In [72]: a += [4, 5, 6]

In [73]: a
Out[73]: [1, 2, 3, 4, 5, 6]

In [74]: b
Out[74]: [1, 2, 3, 4, 5, 6]

In [75]: id(a)
Out[75]: 4477149984

In [76]: id(b)
Out[76]: 4477149984

x = x + y

In [77]: a = [1, 2, 3]

In [78]: b = a

In [79]: id(a)
Out[79]: 4476686208

In [80]: id(b)
Out[80]: 4476686208

In [81]: a = a + [4, 5, 6]

In [82]: a
Out[82]: [1, 2, 3, 4, 5, 6]

In [83]: b
Out[83]: [1, 2, 3]

In [84]: id(a)
Out[84]: 4477187640

In [85]: id(b)
Out[85]: 4476686208

可以看出对于可变对象而言 x = x + y 这种形式已经改变了x的指向,而不是"inplace"的修改。

使用dis模块进行一下验证。

In [86]: def foo(x, y):
 ...:  x += y
 ...:  return x
 ...:

In [87]: def foo(x, y):
 ...:  x += y
 ...:

In [88]: def foo2(x, y):
 ...:  x = x + y
 ...:

In [89]: dis.dis(foo)
 2   0 LOAD_FAST    0 (x)
    3 LOAD_FAST    1 (y)
    6 INPLACE_ADD
    7 STORE_FAST    0 (x)
    10 LOAD_CONST    0 (None)
    13 RETURN_VALUE

In [90]: dis.dis(foo2)
 2   0 LOAD_FAST    0 (x)
    3 LOAD_FAST    1 (y)
    6 BINARY_ADD
    7 STORE_FAST    0 (x)
    10 LOAD_CONST    0 (None)
    13 RETURN_VALUE

可以看到字节码是不同的:

  • += 对应 INPLACE_ADD
  • 对应BINARY_ADD

注意:以上仅适用于CPython实现。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python统计cpu利用率的方法
Jun 02 Python
Python的mysql数据库的更新如何实现
Jul 31 Python
快速解决pandas.read_csv()乱码的问题
Jun 15 Python
Python装饰器基础概念与用法详解
Dec 22 Python
pyqt远程批量执行Linux命令程序的方法
Feb 14 Python
python 爬虫百度地图的信息界面的实现方法
Oct 27 Python
Python通过递归获取目录下指定文件代码实例
Nov 07 Python
使用pytorch实现可视化中间层的结果
Dec 30 Python
面向新手解析python Beautiful Soup基本用法
Jul 11 Python
Python filter过滤器原理及实例应用
Aug 18 Python
python math模块的基本使用教程
Jan 16 Python
python使用matplotlib绘制图片时x轴的刻度处理
Aug 30 Python
回调函数的意义以及python实现实例
Jun 20 #Python
Python处理Excel文件实例代码
Jun 20 #Python
python构建自定义回调函数详解
Jun 20 #Python
Python实现完整的事务操作示例
Jun 20 #Python
python3.4用循环往mysql5.7中写数据并输出的实现方法
Jun 20 #Python
Python实现多并发访问网站功能示例
Jun 19 #Python
Python sqlite3事务处理方法实例分析
Jun 19 #Python
You might like
php4与php5的区别小结(配置异同)
2011/12/20 PHP
在Win7 中为php扩展配置Xcache
2014/10/08 PHP
thinkphp实现发送邮件密码找回功能实例
2014/12/01 PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
2019/09/30 PHP
Javascript 遮罩层和加载效果代码
2013/08/01 Javascript
12行javascript代码绘制一个八卦图
2015/04/02 Javascript
JavaScript实现定时隐藏与显示图片的方法
2015/08/06 Javascript
jQuery实现的背景动态变化导航菜单效果
2015/08/24 Javascript
理解javascript中的严格模式
2016/02/01 Javascript
jQuery自定义图片缩放拖拽插件imageQ实现方法(附demo源码下载)
2016/05/27 Javascript
基于BootStrap环境写jQuery tabs插件
2016/07/12 Javascript
jQuery事件处理的特征(事件命名机制)
2016/08/23 Javascript
浅谈jquery中使用canvas的问题
2016/10/10 Javascript
微信小程序开发之圆形菜单 仿建行圆形菜单实例
2016/12/12 Javascript
实现点击下箭头变上箭头来回切换的两种方法【推荐】
2016/12/14 Javascript
AngularJS开发教程之控制器之间的通信方法分析
2016/12/25 Javascript
详解AngularJS ng-class样式切换
2017/06/27 Javascript
微信小程序tab切换可滑动切换导航栏跟随滚动实现代码
2019/09/04 Javascript
jQuery操作动画完整实例分析
2020/01/10 jQuery
js中!和!!的区别与用法
2020/05/09 Javascript
跟老齐学Python之画圈还不简单吗?
2014/09/20 Python
详细介绍Python的鸭子类型
2016/09/12 Python
Selenium的使用详解
2018/10/19 Python
python实现n个数中选出m个数的方法
2018/11/13 Python
用python脚本24小时刷浏览器的访问量方法
2018/12/07 Python
HTML5中判断用户是否正在浏览页面的方法
2014/05/03 HTML / CSS
房地产促销活动方案
2014/03/01 职场文书
内勤主管岗位职责
2014/04/03 职场文书
临床医师个人自我评价
2014/04/06 职场文书
大学生通用个人自我评价
2014/04/27 职场文书
领导莅临指导欢迎词
2015/09/30 职场文书
小组口号霸气押韵
2015/12/24 职场文书
学习杨善洲同志先进事迹心得体会
2016/01/23 职场文书
《成长的天空》读后感3篇
2019/12/06 职场文书
go语言-在mac下brew升级golang
2021/04/25 Golang
Windows server 2016服务器基本设置
2022/08/14 Servers