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 urllib、urllib2、httplib抓取网页代码实例
May 09 Python
Python实现的人工神经网络算法示例【基于反向传播算法】
Nov 11 Python
Python实现将HTML转换成doc格式文件的方法示例
Nov 20 Python
Python编程使用*解包和itertools.product()求笛卡尔积的方法
Dec 18 Python
Python中的单继承与多继承实例分析
May 10 Python
Python实现压缩文件夹与解压缩zip文件的方法
Sep 01 Python
Pycharm创建项目时如何自动添加头部信息
Nov 14 Python
PyCharm+Pipenv虚拟环境开发和依赖管理的教程详解
Apr 16 Python
scrapy爬虫:scrapy.FormRequest中formdata参数详解
Apr 30 Python
Python引入多个模块及包的概念过程解析
Sep 21 Python
pycharm 实现复制一行的快捷键
Jan 15 Python
如何用python开发Zeroc Ice应用
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
收音机另类DIY - 纸巾盒做外壳
2021/03/02 无线电
PHP用GD库生成高质量的缩略图片
2011/03/09 PHP
php 修改上传文件大小限制实例详解
2016/10/23 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
理清apply(),call()的区别和关系
2011/08/14 Javascript
文本框中禁止非数字字符输入比如手机号码、邮编
2013/08/19 Javascript
javascript实现捕捉键盘上按下的键
2015/05/05 Javascript
javascript的BOM汇总
2015/07/16 Javascript
JQuery实现鼠标滚轮滑动到页面节点
2015/07/28 Javascript
Bootstrap按钮功能之查询按钮和重置按钮
2016/10/26 Javascript
神级程序员JavaScript300行代码搞定汉字转拼音
2017/05/20 Javascript
微信小程序之选项卡的实现方法
2017/09/29 Javascript
jQuery+datatables插件实现ajax加载数据与增删改查功能示例
2018/04/17 jQuery
浅析Proxy可以优化vue的数据监听机制问题及实现思路
2018/11/29 Javascript
使用element-ui table expand展开行实现手风琴效果
2019/03/15 Javascript
Vue基于iview实现登录密码的显示与隐藏功能
2020/03/06 Javascript
[27:08]完美世界DOTA2联赛PWL S2 SZ vs Rebirth 第二场 11.21
2020/11/23 DOTA
定制FileField中的上传文件名称实例
2017/08/23 Python
基于Python代码编辑器的选用(详解)
2017/09/13 Python
用十张图详解TensorFlow数据读取机制(附代码)
2018/02/06 Python
Python 读取指定文件夹下的所有图像方法
2018/04/27 Python
python:动态路由的Flask程序代码
2019/11/22 Python
Keras设置以及获取权重的实现
2020/06/19 Python
互斥锁解决 Python 中多线程共享全局变量的问题(推荐)
2020/09/28 Python
css3个性化字体_动力节点Java学院整理
2017/07/12 HTML / CSS
通过一张图教会你CSS3倒影的实现
2017/09/26 HTML / CSS
美国南加州的原创极限运动潮牌:Vans(范斯)
2016/08/05 全球购物
英国珠宝网站Argento: PANDORA、Olivia Burton和Nomination等
2020/05/08 全球购物
民生工程实施方案
2014/03/22 职场文书
暖通工程师岗位职责
2014/06/12 职场文书
大学生档案自我鉴定(2篇)
2014/10/14 职场文书
授权委托书
2015/01/28 职场文书
AI:如何训练机器学习的模型
2021/04/16 Python
详解python网络进程
2021/06/15 Python
JavaScript获取URL参数的方法分享
2022/04/07 Javascript
vue 把二维或多维数组转一维数组
2022/04/24 Vue.js