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实现apahce网站日志分析示例
Apr 02 Python
python里将list中元素依次向前移动一位
Sep 12 Python
Python xlrd读取excel日期类型的2种方法
Apr 28 Python
Python做简单的字符串匹配详解
Mar 21 Python
Python实现解析Bit Torrent种子文件内容的方法
Aug 29 Python
详解python做UI界面的方法
Feb 27 Python
详解python读取image
Apr 03 Python
selenium2.0中常用的python函数汇总
Aug 05 Python
Python类中的魔法方法之 __slots__原理解析
Aug 26 Python
Python基于当前时间批量创建文件
May 07 Python
在Keras中CNN联合LSTM进行分类实例
Jun 29 Python
教你如何使用Python开发一个钉钉群应答机器人
Jun 21 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 和 MySQL 基础教程(三)
2006/10/09 PHP
php下使用SMTP发邮件的代码
2008/01/10 PHP
MySQL的FIND_IN_SET函数使用方法分享
2012/03/27 PHP
php 模拟POST提交的2种方法详解
2013/06/17 PHP
windows服务器中检测PHP SSL是否开启以及开启SSL的方法
2014/04/25 PHP
PHP attributes()函数讲解
2019/02/03 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
Javascript this关键字使用分析
2008/10/21 Javascript
一个JS小玩意 几个属性相加不能超过一个特定值.
2009/09/29 Javascript
解决jquery .ajax 在IE下卡死问题的解决方法
2009/10/26 Javascript
JavaScript DOM 学习第七章 表单的扩展
2010/02/19 Javascript
不要在cookie中使用特殊字符的原因分析
2010/07/13 Javascript
jQuery计算textarea中文字数(剩余个数)的小程序
2013/11/28 Javascript
javascript读取xml实现javascript分页
2013/12/13 Javascript
基于javascript canvas实现五子棋游戏
2020/07/08 Javascript
[01:29]2017 DOTA2国际邀请赛官方英雄手办展示
2017/03/18 DOTA
[08:17]Ti9 现场cosplay
2019/09/10 DOTA
python 日志增量抓取实现方法
2018/04/28 Python
Python动态导入模块的方法实例分析
2018/06/28 Python
windows下 兼容Python2和Python3的解决方法
2018/12/05 Python
python smtplib发送多个email联系人的实现
2020/10/09 Python
python爬取天气数据的实例详解
2020/11/20 Python
英国性感内衣和睡衣品牌:Bluebella
2018/01/26 全球购物
Europcar西班牙:全球汽车租赁领域的领导者
2018/09/17 全球购物
英国和国际包裹递送:ParcelCompare
2019/08/26 全球购物
Canal官网:巴西女性时尚品牌
2019/10/16 全球购物
德国2018年度最佳在线药房:Bodfeld Apotheke
2019/11/04 全球购物
毕业生幼师求职自荐信
2013/10/01 职场文书
本科生职业生涯规划书范文
2014/01/21 职场文书
美食节策划方案
2014/05/26 职场文书
信息简报范文
2015/07/21 职场文书
2016年春季运动会广播稿
2015/08/19 职场文书
Python os和os.path模块详情
2022/04/02 Python
python模拟浏览器 使用selenium进入好友QQ空间并留言
2022/04/12 Python
react中useState使用:如何实现在当前表格直接更改数据
2022/08/05 Javascript
戴尔Win11系统no bootable devices found解决教程
2022/09/23 数码科技