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开发的nosql数据库CodernityDB介绍和使用实例
Oct 23 Python
快速查询Python文档方法分享
Dec 27 Python
python opencv旋转图像(保持图像不被裁减)
Jul 26 Python
Python Pexpect库的简单使用方法
Jan 29 Python
Python中super函数用法实例分析
Mar 18 Python
Python eval的常见错误封装及利用原理详解
Mar 26 Python
python数据挖掘需要学的内容
Jun 23 Python
python如何通过闭包实现计算器的功能
Feb 22 Python
解决python便携版无法直接运行py文件的问题
Sep 01 Python
实现Python3数组旋转的3种算法实例
Sep 16 Python
Python word文本自动化操作实现方法解析
Nov 05 Python
Python文件的操作示例的详细讲解
Apr 08 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中运行Linux命令并启动SSH服务的例子
2014/06/12 PHP
php广告加载类用法实例
2014/09/23 PHP
JS 自动安装exe程序
2008/11/30 Javascript
jquery 简单图片导航插件jquery.imgNav.js
2010/03/17 Javascript
Tab页界面 用jQuery及Ajax技术实现(php后台)
2011/10/12 Javascript
jquery.autocomplete修改实现键盘上下键自动填充示例
2013/11/19 Javascript
node.js中的fs.readFile方法使用说明
2014/12/15 Javascript
js+css实现的圆角边框TAB选项卡滑动门代码分享(2款)
2015/08/26 Javascript
基于JavaScript实现快速转换文本语言(繁体中文和简体中文)
2016/03/07 Javascript
javascript函数自动执行常用方法汇总
2016/03/28 Javascript
JS控制静态页面之间传递参数获取参数并应用的简单实例
2016/08/10 Javascript
AngularJs 动态加载模块和依赖
2016/09/15 Javascript
JS识别浏览器类型(电脑浏览器和手机浏览器)
2016/11/18 Javascript
js中删除数组中的某一元素实例(无下标时)
2017/02/28 Javascript
vue学习之mintui picker选择器实现省市二级联动示例
2017/10/12 Javascript
BootStrap Validator 根据条件在JS中添加或移除校验操作
2017/10/12 Javascript
js实现HTML中Select二级联动的实例
2018/01/05 Javascript
详解webpack-dev-server使用http-proxy解决跨域问题
2018/01/13 Javascript
通过seajs实现JavaScript的模块开发及按模块加载
2019/06/06 Javascript
[01:02:17]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG
2014/05/26 DOTA
[01:10:58]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
Python入门篇之对象类型
2014/10/17 Python
Python入门篇之条件、循环
2014/10/17 Python
浅谈Python 字符串格式化输出(format/printf)
2016/07/21 Python
Python把csv数据写入list和字典类型的变量脚本方法
2018/06/15 Python
Python列表解析配合if else的方法
2018/06/23 Python
深入浅析Python中list的复制及深拷贝与浅拷贝
2018/09/03 Python
python取余运算符知识点详解
2019/06/27 Python
python实现知乎高颜值图片爬取
2019/08/12 Python
python使用正则来处理各种匹配问题
2019/12/22 Python
解决python打开https出现certificate verify failed的问题
2020/09/03 Python
Python猫眼电影最近上映的电影票房信息
2020/09/18 Python
python修改微信和支付宝步数的示例代码
2020/10/12 Python
印尼最大的婴儿用品购物网站:Orami
2017/09/28 全球购物
求职自荐信范文格式
2013/11/29 职场文书
售后主管岗位职责
2013/12/08 职场文书