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中除法使用的注意事项
Aug 21 Python
wxPython窗口中文乱码解决方法
Oct 11 Python
Python使用xlrd读取Excel格式文件的方法
Mar 10 Python
python实现mysql的单引号字符串过滤方法
Nov 14 Python
Python的包管理器pip更换软件源的方法详解
Jun 20 Python
独特的python循环语句
Nov 20 Python
Django学习笔记之Class-Based-View
Feb 15 Python
python实现图像检索的三种(直方图/OpenCV/哈希法)
Aug 08 Python
使用OpenCV实现仿射变换—平移功能
Aug 29 Python
使用Python对Dicom文件进行读取与写入的实现
Apr 20 Python
keras的backend 设置 tensorflow,theano操作
Jun 30 Python
PyCharm Community安装与配置的详细教程
Nov 24 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
linux下为php添加curl扩展的方法
2011/07/29 PHP
ThinkPHP 防止表单重复提交的方法
2011/08/08 PHP
php获取数组中重复数据的两种方法
2013/06/28 PHP
php去除数组中重复数据
2014/11/18 PHP
ThinkPHP里用U方法调用js文件实例
2015/06/18 PHP
php制作基于xml的RSS订阅源功能示例
2017/02/08 PHP
jQuery 页面 Mask实现代码
2010/01/09 Javascript
JQuery Ajax通过Handler访问外部XML数据的代码
2010/06/01 Javascript
js获取窗口相对于屏幕左边和上边的位置坐标
2014/05/15 Javascript
JavaScript中的对象序列化介绍
2014/12/30 Javascript
Javascript调用函数方法的几种方式介绍
2015/03/20 Javascript
JS实现图片平面旋转的方法
2016/03/01 Javascript
jQuery移动端日期(datedropper)和时间(timedropper)选择器附源码下载
2016/04/19 Javascript
使用jQuery处理AJAX请求的基础学习教程
2016/05/10 Javascript
基于BootStrap Metronic开发框架经验小结【七】数据的导入、导出及附件的查看处理
2016/05/12 Javascript
JS中判断字符串中出现次数最多的字符及出现的次数的简单实例
2016/06/03 Javascript
js仿iphone秒表功能 计算平均数
2017/01/11 Javascript
React.js中常用的ES6写法总结(推荐)
2017/05/09 Javascript
基于构造函数的五种继承方法小结
2017/07/27 Javascript
js实现点击按钮复制文本功能
2020/07/20 Javascript
在vue.js中使用JSZip实现在前端解压文件的方法
2018/09/05 Javascript
学习python类方法与对象方法
2016/03/15 Python
Python中的asyncio代码详解
2019/06/10 Python
python实现学生管理系统开发
2020/07/24 Python
J.Crew官网:美国知名休闲服装品牌
2017/05/19 全球购物
Kaufmann Mercantile官网:家居装饰、配件、户外及更多
2018/09/28 全球购物
普通PHP程序员笔试题
2016/01/01 面试题
2013年入党人员的自我鉴定
2013/10/25 职场文书
军训鉴定表自我鉴定
2014/02/13 职场文书
幼儿园老师寄语
2014/04/03 职场文书
医生学习党的群众路线教育实践活动心得体会
2014/11/03 职场文书
三八妇女节慰问信
2015/02/14 职场文书
幼儿园六一主持词开场白
2015/05/28 职场文书
2016大一新生入学教育心得体会
2016/01/23 职场文书
Python可视化学习之seaborn绘制矩阵图详解
2022/02/24 Python
《LOL》“克隆大作战”久违归来 幻灵战队皮肤上线
2022/04/03 其他游戏