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使用循环实现批量创建文件夹示例
Mar 25 Python
Python进阶_关于命名空间与作用域(详解)
May 29 Python
Python排序搜索基本算法之归并排序实例分析
Dec 08 Python
Python机器学习之scikit-learn库中KNN算法的封装与使用方法
Dec 14 Python
详解numpy的argmax的具体使用
May 27 Python
python绘制直方图和密度图的实例
Jul 08 Python
Django 迁移、操作数据库的方法
Aug 02 Python
Python如何使用k-means方法将列表中相似的句子归类
Aug 08 Python
pandas 空数据处理方法详解
Nov 02 Python
Python使用turtle库绘制小猪佩奇(实例代码)
Jan 16 Python
Pandas的Apply函数具体使用
Jul 21 Python
利用Python中的Xpath实现一个在线汇率转换器
Sep 09 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下intval()和(int)转换使用与区别
2008/07/18 PHP
PHP通用检测函数集合
2011/02/08 PHP
PHP中is_dir()函数使用指南
2015/05/08 PHP
微信开发之网页授权获取用户信息(二)
2016/01/08 PHP
人脸识别测颜值、测脸龄、测相似度微信接口
2016/04/07 PHP
php封装的图片(缩略图)处理类完整实例
2016/10/19 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
用javascript父窗口控制只弹出一个子窗口
2007/04/10 Javascript
IE 缓存策略的BUG的解决方法
2007/07/21 Javascript
javascript屏蔽右键代码
2014/05/15 Javascript
在Ubuntu上安装最新版本的Node.js
2014/07/14 Javascript
深入解析JavaScript中的数字对象与字符串对象
2015/10/21 Javascript
vue过渡和animate.css结合使用详解
2017/06/14 Javascript
vue中页面跳转拦截器的实现方法
2017/08/23 Javascript
AngularJS中scope的绑定策略实例分析
2017/10/30 Javascript
在React 组件中使用Echarts的示例代码
2017/11/08 Javascript
vscode配置vue下的es6规范自动格式化详解
2019/03/20 Javascript
通过数据库对Django进行删除字段和删除模型的操作
2015/07/21 Python
Python机器学习logistic回归代码解析
2018/01/17 Python
Python代码缩进和测试模块示例详解
2018/05/07 Python
Python简单实现网页内容抓取功能示例
2018/06/07 Python
Python数据类型之Dict字典实例详解
2019/05/07 Python
python实现简单坦克大战
2020/03/27 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
2020/09/03 Python
CSS3 分类菜单效果
2019/05/27 HTML / CSS
html5的画布canvas——画出弧线、旋转的图形实例代码+效果图
2013/06/09 HTML / CSS
HTML5 Canvas实现360度全景图的示例代码
2018/01/29 HTML / CSS
.net笔试题
2014/03/03 面试题
函授本科毕业自我鉴定
2013/10/09 职场文书
高中语文教学反思
2014/01/16 职场文书
师范教师专业大学生职业生涯规划范文
2014/03/02 职场文书
入党积极分子批评与自我批评思想汇报
2014/09/14 职场文书
高二化学教学反思
2016/02/22 职场文书
《春酒》教学反思
2016/02/22 职场文书
PyCharm配置KBEngine快速处理代码提示冲突、配置命令问题
2021/04/03 Python
python unittest单元测试的步骤分析
2021/08/02 Python