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生成url短链接的方法
May 04 Python
Python自定义主从分布式架构实例分析
Sep 19 Python
Python实现正整数分解质因数操作示例
Aug 01 Python
详解python中Numpy的属性与创建矩阵
Sep 10 Python
解决每次打开pycharm直接进入项目的问题
Oct 28 Python
python爬虫selenium和phantomJs使用方法解析
Aug 08 Python
python os.path.isfile 的使用误区详解
Nov 29 Python
使用pytorch完成kaggle猫狗图像识别方式
Jan 10 Python
Django Admin 上传文件到七牛云的示例代码
Jun 20 Python
全网最全python库selenium自动化使用详细教程
Jan 12 Python
python日志通过不同的等级打印不同的颜色(示例代码)
Jan 13 Python
详解Pymongo常用查询方法总结
Jan 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
PHILIPS L4X25T电路分析和打理
2021/03/02 无线电
一个简单的PHP入门源程序
2006/10/09 PHP
PHP 遍历文件实现代码
2011/05/04 PHP
php数组合并与拆分实例分析
2015/06/12 PHP
php冒泡排序与快速排序实例详解
2015/12/07 PHP
event.keyCode键码值表 附只能输入特定的字符串代码
2009/05/15 Javascript
jQuery AJAX回调函数this指向问题
2010/02/08 Javascript
JavaScript 代码压缩工具小结
2012/02/27 Javascript
js控制表单不能输入空格的小例子
2013/11/20 Javascript
jQuery固定浮动侧边栏实现思路及代码
2014/09/28 Javascript
javascript中alert()与console.log()的区别
2015/08/26 Javascript
jQuery简单获取键盘事件的方法
2016/01/22 Javascript
使用jQuery的toggle()方法对HTML标签进行显示、隐藏的方法(示例)
2016/09/01 Javascript
JS 调用微信扫一扫功能
2016/12/22 Javascript
Bootstrap进度条学习使用
2017/02/09 Javascript
微信小程序 动态绑定数据及动态事件处理
2017/03/14 Javascript
Vue中定义全局变量与常量的各种方式详解
2017/08/23 Javascript
js使用generator函数同步执行ajax任务
2017/09/05 Javascript
vue-cli3环境变量与分环境打包的方法示例
2019/02/18 Javascript
原生js实现自定义滚动条组件
2021/01/20 Javascript
python操作MySQL数据库的方法分享
2012/05/29 Python
详解Python的单元测试
2015/04/28 Python
Diango + uwsgi + nginx项目部署的全过程(可外网访问)
2018/04/22 Python
Python字典中的值为列表或字典的构造实例
2019/12/16 Python
python中什么是面向对象
2020/06/11 Python
Python 执行矩阵与线性代数运算
2020/08/01 Python
写好自荐信要注意的问题
2013/11/10 职场文书
违反工作纪律检讨书
2014/02/15 职场文书
青年志愿者先进事迹
2014/05/06 职场文书
辞职信的写法
2015/02/27 职场文书
作息时间调整通知
2015/04/22 职场文书
病假证明模板
2015/06/19 职场文书
初中生入团申请书范文(五篇)
2019/10/16 职场文书
python实现股票历史数据可视化分析案例
2021/06/10 Python
win11高清晰音频管理器在哪里?win11找不到高清晰音频管理器解决办法
2022/04/08 数码科技
html中相对位置与绝对位置的具体使用
2022/05/15 HTML / CSS