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中关于中文编码问题的处理建议
Apr 08 Python
在Python中使用Neo4j数据库的教程
Apr 16 Python
python使用PyGame绘制图像并保存为图片文件的方法
Apr 24 Python
Python lxml模块安装教程
Jun 02 Python
深入理解python中的atexit模块
Mar 07 Python
python利用dir函数查看类中所有成员函数示例代码
Sep 08 Python
python实现多进程代码示例
Oct 31 Python
python调用c++传递数组的实例
Feb 13 Python
Python netmiko模块的使用
Feb 14 Python
pycharm解决关闭flask后依旧可以访问服务的问题
Apr 03 Python
关于Theano和Tensorflow多GPU使用问题
Jun 19 Python
Django restful framework生成API文档过程详解
Nov 12 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
smarty实例教程
2006/11/19 PHP
PHP JSON格式数据交互实例代码详解
2011/01/13 PHP
关于url地址传参数时字符串有回车造成页面脚本赋值失败的解决方法
2013/06/28 PHP
js图片自动切换效果处理代码
2013/05/07 Javascript
jQuery操作input值的各种方法总结
2013/11/21 Javascript
jQuery自定义事件的简单实现代码
2014/01/27 Javascript
Node.js 制作实时多人游戏框架
2015/01/08 Javascript
使用jQuery+EasyUI实现CheckBoxTree的级联选中特效
2015/12/06 Javascript
JS得到当前时间的方法示例
2017/03/24 Javascript
angular动态表单制作
2018/02/23 Javascript
红黑树的插入详解及Javascript实现方法示例
2018/03/26 Javascript
centos 上快速搭建ghost博客方法分享
2018/05/23 Javascript
三种Webpack打包方式(小结)
2018/09/19 Javascript
解决cordova+vue 项目打包成APK应用遇到的问题
2019/05/10 Javascript
详解如何写出一个利于扩展的vue路由配置
2019/05/16 Javascript
Vue中对iframe实现keep alive无刷新的方法
2019/07/23 Javascript
jQuery实现每日秒杀商品倒计时功能
2019/09/06 jQuery
vue-property-decorator用法详解
2019/12/12 Javascript
js实现简单贪吃蛇游戏
2020/05/15 Javascript
element-ui tree结构实现增删改自定义功能代码
2020/08/31 Javascript
[03:32]2014DOTA2西雅图邀请赛 CIS外卡赛赛前black专访
2014/07/09 DOTA
在Python中使用SQLite的简单教程
2015/04/29 Python
python 读写txt文件 json文件的实现方法
2016/10/22 Python
pygame实现飞机大战
2020/03/11 Python
Django添加bootstrap框架时无法加载静态文件的解决方式
2020/03/27 Python
pandas dataframe 中的explode函数用法详解
2020/05/18 Python
CSS3 伪类选择器 nth-child()说明
2010/07/10 HTML / CSS
使用HTML5的Notification API制作web通知的教程
2015/05/08 HTML / CSS
HTML5中的进度条progress元素简介及兼容性处理
2016/06/02 HTML / CSS
应聘教师自荐信
2013/10/12 职场文书
社区党总支书记先进事迹材料
2014/01/24 职场文书
2015年十一国庆节演讲稿
2015/03/20 职场文书
启迪人心的励志语录:脾气永远不要大于本事
2020/01/02 职场文书
Python道路车道线检测的实现
2021/06/27 Python
简单聊聊Vue中的计算属性和属性侦听
2021/10/05 Vue.js
Redis入门基础常用操作命令整理
2022/06/01 Redis