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 相关文章推荐
Django中几种重定向方法
Apr 28 Python
Python安装pycurl失败的解决方法
Oct 15 Python
Python对切片命名的实现方法
Oct 16 Python
解决python给列表里添加字典时被最后一个覆盖的问题
Jan 21 Python
Python实现点阵字体读取与转换的方法
Jan 29 Python
解决Python3用PIL的ImageFont输出中文乱码的问题
Aug 22 Python
Python 寻找局部最高点的实现
Dec 05 Python
Python列表list操作相关知识小结
Jan 29 Python
jupyter note 实现将数据保存为word
Apr 14 Python
Django+Celery实现动态配置定时任务的方法示例
May 26 Python
Python中random模块常用方法的使用教程
Oct 04 Python
Sublime Text3最新激活注册码分享适用2020最新版 亲测可用
Nov 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实现微信公众平台发红包功能
2018/06/14 PHP
扩展String功能方法
2006/09/22 Javascript
基于JQuery的日期联动实现代码
2011/02/24 Javascript
通过JS自动隐藏手机浏览器的地址栏实现原理与代码
2013/01/02 Javascript
将list转换为json失败的原因
2013/12/17 Javascript
js 绑定键盘鼠标事件示例代码
2014/02/12 Javascript
类似天猫商品详情随浏览器移动的示例代码
2014/02/27 Javascript
JS中FRAME的操作问题实例分析
2014/10/21 Javascript
jQuery实现购物车数字加减效果
2015/03/14 Javascript
javascript 使用for循环时该注意的问题-附问题总结
2015/08/19 Javascript
js实现温度计时间样式代码分享
2015/08/21 Javascript
用户代理字符串userAgent可实现的四个识别
2015/09/20 Javascript
JQuery+Ajax实现数据查询、排序和分页功能
2015/09/27 Javascript
javascript如何写热点图
2015/12/08 Javascript
解析JavaScript面向对象概念中的Object类型与作用域
2016/05/10 Javascript
论Bootstrap3和Foundation5网格系统的异同
2016/05/16 Javascript
jQuery插件扩展测试实例
2016/06/21 Javascript
js实现图片懒加载效果
2017/07/17 Javascript
vue+springboot前后端分离实现单点登录跨域问题解决方法
2018/01/30 Javascript
axios 处理 302 状态码的解决方法
2018/04/10 Javascript
记录vue项目中遇到的一点小问题
2019/05/14 Javascript
three.js 利用uv和ThreeBSP制作一个快递柜功能
2020/08/18 Javascript
Python open()文件处理使用介绍
2014/11/30 Python
python图片验证码生成代码
2016/07/02 Python
Python读取YUV文件,并显示的方法
2018/12/04 Python
使用python画社交网络图实例代码
2019/07/10 Python
Python循环实现n的全排列功能
2019/09/16 Python
淘宝秒杀python脚本 扫码登录版
2019/09/19 Python
python 实现在无序数组中找到中位数方法
2020/03/03 Python
python主要用于哪些方向
2020/07/05 Python
Python selenium如何打包静态网页并下载
2020/08/12 Python
python FTP编程基础入门
2021/02/27 Python
巧克力领导品牌瑞士莲美国官网:Lindt Chocolate美国
2016/08/25 全球购物
印度在线杂货店:bigbasket
2018/08/23 全球购物
空气环保标语
2014/06/12 职场文书
人生哲理妙语30条:淡写流年,笑过人生
2019/09/04 职场文书