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实现通过pil模块对图片格式进行转换的方法
Mar 24 Python
Python设计模式中单例模式的实现及在Tornado中的应用
Mar 02 Python
使用Python内置的模块与函数进行不同进制的数的转换
Mar 12 Python
浅析python递归函数和河内塔问题
Apr 18 Python
浅谈pyhton学习中出现的各种问题(新手必看)
May 17 Python
python中matplotlib实现最小二乘法拟合的过程详解
Jul 11 Python
Python编程使用*解包和itertools.product()求笛卡尔积的方法
Dec 18 Python
详解小白之KMP算法及python实现
Apr 04 Python
关于Python3 lambda函数的深入浅出
Nov 27 Python
解决python-docx打包之后找不到default.docx的问题
Feb 13 Python
Python带参数的装饰器运行原理解析
Jun 09 Python
在Keras中CNN联合LSTM进行分类实例
Jun 29 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
PHP中的string类型使用说明
2010/07/27 PHP
php获取QQ头像并显示的方法
2014/12/23 PHP
php在线解压ZIP文件的方法
2014/12/30 PHP
PHP PDOStatement::nextRowset讲解
2019/02/01 PHP
JS 强制设为首页的代码
2009/01/31 Javascript
jQuery源码分析-01总体架构分析
2011/11/14 Javascript
js 程序执行与顺序实现详解
2013/05/13 Javascript
JavaScript中的setUTCDate()方法使用详解
2015/06/11 Javascript
easyui validatebox验证
2016/04/29 Javascript
js实现页面a向页面b传参的方法
2016/05/29 Javascript
AngularJS基础 ng-options 指令详解
2016/08/02 Javascript
新闻上下滚动jquery 超简洁(必看篇)
2017/01/21 Javascript
AngularJS学习第二篇 AngularJS依赖注入
2017/02/13 Javascript
JS随机排序数组实现方法分析
2017/10/11 Javascript
vue axios登录请求拦截器
2018/04/02 Javascript
Vue组件中prop属性使用说明实例代码详解
2018/05/31 Javascript
React如何解决fetch跨域请求时session失效问题
2018/11/02 Javascript
vue实现按需加载组件及异步组件功能
2019/05/27 Javascript
浅谈vue单页面中有多个echarts图表时的公用代码写法
2020/07/19 Javascript
python 自动提交和抓取网页
2009/07/13 Python
Python的设计模式编程入门指南
2015/04/02 Python
Python实现文件复制删除
2016/04/19 Python
Python实现定时备份mysql数据库并把备份数据库邮件发送
2018/03/08 Python
python实现自动化报表功能(Oracle/plsql/Excel/多线程)
2019/12/02 Python
python中怎么表示空值
2020/06/19 Python
探究 canvas 绘图中撤销(undo)功能的实现方式详解
2018/05/17 HTML / CSS
把富文本的回车转为br标签
2019/08/09 HTML / CSS
荷兰在线钓鱼商店:Raven
2019/06/26 全球购物
俄罗斯香水和化妆品在线商店:Aroma-butik
2020/02/28 全球购物
英语专业推荐信
2013/11/16 职场文书
外贸销售员求职的自我评价
2013/11/23 职场文书
2014年教师节讲话稿5篇
2014/09/10 职场文书
银行保安拾金不昧表扬稿
2015/05/05 职场文书
幼儿园中班教育随笔
2015/08/14 职场文书
2016年感恩父亲节活动总结
2016/04/01 职场文书
Golang 链表的学习和使用
2022/04/19 Golang