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多线程学习资料
Dec 19 Python
Python中AND、OR的一个使用小技巧
Feb 18 Python
Python的Django框架中TEMPLATES项的设置教程
May 29 Python
浅谈pyqt5中信号与槽的认识
Feb 17 Python
Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法
Apr 01 Python
Python 中PyQt5 点击主窗口弹出另一个窗口的实现方法
Jul 04 Python
使用Django搭建web服务器的例子(最最正确的方式)
Aug 29 Python
pytorch中tensor.expand()和tensor.expand_as()函数详解
Dec 27 Python
Pytorch 搭建分类回归神经网络并用GPU进行加速的例子
Jan 09 Python
python安装dlib库报错问题及解决方法
Mar 16 Python
django 获取字段最大值,最新的记录操作
Aug 09 Python
python时间time模块处理大全
Oct 25 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
WIN98下Apache1.3.14+PHP4.0.4的安装
2006/10/09 PHP
PHP中的正规表达式(二)
2006/10/09 PHP
Snoopy类使用小例子
2008/04/15 PHP
javascript中的几个运算符
2007/06/29 Javascript
jQuery获取浏览器中的分辨率实现代码
2013/04/23 Javascript
jquery.form.js用法之清空form的方法
2014/03/07 Javascript
JQuery中属性过滤选择器用法实例分析
2015/05/18 Javascript
JS实现仿微博可关闭弹出层效果
2015/09/21 Javascript
JS+CSS实现类似QQ好友及黑名单效果的树型菜单
2015/09/22 Javascript
jQuery mobile转换url地址及获取url中目录部分的方法
2015/12/04 Javascript
javascript轻量级库createjs使用Easel实现拖拽效果
2016/02/19 Javascript
深入理解(function(){... })();
2016/08/16 Javascript
纯js三维数组实现三级联动效果
2017/02/07 Javascript
关于Sequelize连接查询时inlude中model和association的区别详解
2017/02/27 Javascript
Bootstrap下拉菜单Dropdowns的实现代码
2017/03/17 Javascript
javaScript之split与join的区别(详解)
2017/11/08 Javascript
原生js实现抽奖小游戏
2019/06/27 Javascript
vue实现树形结构样式和功能的实例代码
2019/10/15 Javascript
Vue组件通信$attrs、$listeners实现原理解析
2020/09/03 Javascript
[02:02]特效爆炸!DOTA2珍宝之瓶待你开启
2018/08/21 DOTA
在MAC上搭建python数据分析开发环境
2016/01/26 Python
Python的Django框架中使用SQLAlchemy操作数据库的教程
2016/06/02 Python
python实现自动网页截图并裁剪图片
2018/07/30 Python
python3 实现一行输入,空格隔开的示例
2018/11/14 Python
Python FtpLib模块应用操作详解
2019/12/12 Python
PyQt5实现登录页面
2020/05/30 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
2020/09/03 Python
Python虚拟环境的创建和使用详解
2020/09/07 Python
3D动画《斗罗大陆》上线当日播放过亿
2021/03/16 国漫
护理专业推荐信
2013/11/07 职场文书
校园联欢晚会主持词
2014/03/17 职场文书
大学新闻系求职信
2014/06/03 职场文书
爱护公共设施标语
2014/06/24 职场文书
保险专业求职信
2014/07/07 职场文书
2014年医德医风工作总结
2014/11/13 职场文书
三好学生评语大全
2014/12/29 职场文书