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实现读取并保存文件的类
May 11 Python
Python实现矩阵加法和乘法的方法分析
Dec 19 Python
python selenium UI自动化解决验证码的4种方法
Jan 05 Python
Python+tkinter使用80行代码实现一个计算器实例
Jan 16 Python
Python 字符串与二进制串的相互转换示例
Jul 23 Python
Python中那些 Pythonic的写法详解
Jul 02 Python
python+logging+yaml实现日志分割
Jul 22 Python
Django 1.10以上版本 url 配置注意事项详解
Aug 05 Python
python常见字符串处理函数与用法汇总
Oct 30 Python
pymysql之cur.fetchall() 和cur.fetchone()用法详解
May 15 Python
Softmax函数原理及Python实现过程解析
May 22 Python
在python中实现导入一个需要传参的模块
May 12 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中的加密功能
2006/10/09 PHP
ThinkPHP模板之变量输出、自定义函数与判断语句用法
2014/11/01 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
2020/04/04 PHP
ASP Json Parser修正版
2009/12/06 Javascript
原生js获取宽高与jquery获取宽高的方法关系对比
2014/04/04 Javascript
jQuery实现列表内容的动态载入特效
2015/08/08 Javascript
基于jquery步骤进度条源码分享
2015/11/12 Javascript
JavaScript设计模式开发中组合模式的使用教程
2016/05/18 Javascript
JavaScript和jquery获取父级元素、子级元素、兄弟元素的方法
2016/06/05 Javascript
Angularjs---项目搭建图文教程
2016/07/08 Javascript
JavaScript设计模式之单体模式全面解析
2016/09/09 Javascript
jQuery动态修改字体大小的方法【测试可用】
2016/09/09 Javascript
JavaScript中原型链存在的问题解析
2016/09/25 Javascript
JavaScript数组迭代方法
2017/03/03 Javascript
vue-cli项目中怎么使用mock数据
2017/09/27 Javascript
vue的三种图片引入方式代码实例
2019/11/19 Javascript
详解Python locals()的陷阱
2019/03/26 Python
python assert的用处示例详解
2019/04/01 Python
详解python 模拟豆瓣登录(豆瓣6.0)
2019/04/18 Python
Python实现二叉树前序、中序、后序及层次遍历示例代码
2019/05/18 Python
Python基于xlrd模块处理合并单元格
2020/07/28 Python
UGG澳洲官网:UGG Australia
2018/04/26 全球购物
意大利咖啡、浓缩咖啡和浓缩咖啡机:illy caffe
2019/03/20 全球购物
俄罗斯药房连锁店:ASNA
2020/06/20 全球购物
linux面试题参考答案(11)
2012/05/01 面试题
超市营业员岗位职责
2013/12/20 职场文书
酒店保安员岗位职责
2014/01/31 职场文书
小学毕业典礼主持词
2014/03/27 职场文书
学校宣传标语
2014/06/18 职场文书
城管个人总结
2015/02/28 职场文书
借钱欠条怎么写
2015/07/03 职场文书
婚礼迎宾词大全
2015/08/10 职场文书
2019年公司卫生管理制度样本
2019/08/21 职场文书
浅谈MySQL之浅入深出页原理
2021/06/23 MySQL
Python函数中的不定长参数相关知识总结
2021/06/24 Python
MySQL如何修改字段类型和字段长度
2022/06/10 MySQL