Python中表达式x += y和x = x+y 的区别详解
作者:hooog 发布时间:2022-02-24 04:11:19
标签:python,表达式
前言
本文主要给大家介绍的是关于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实现。
来源:https://hooog.tk/posts/inplace-binary-add/
0
投稿
猜你喜欢
- 在前面的文章 Python 计算机视觉(十五)—— 图像特效处理 中我已经介绍了大部分的图像的特效处理,但还是忽略了油画特效的处理,在本篇文
- 文章所罗列的问题虽然看似简单,但是每个背后都涵盖了一个或几个大家容易忽视的基础知识点,希望能够帮助到你的面试和平时工作。Q1第一个问题关于弱
- 对于Dreamweaver这个广大用户早有听闻的网页编辑工具,除功能强大外,Dreamweaver一向被推崇为同类网页编辑软件中产生垃圾代码
- 本文实例为大家分享了Python实点云分割k-means(sklearn),供大家参考,具体内容如下植物叶片分割import numpy a
- 实例代码如下def demo(): print("开始执行...") while 1: &nbs
- 正如你现在所看到的一样,网页的布局设计变得越来越重要。访问者不愿意再看到只注重内容的站点。虽然内容很重要,但只有当网页布局和网页内容成功接合
- python天数转日期字符串在利用python读取Excel的时候, 日期格式的单元格读取出来是数字,该数字表示1990年01月01日到该日
- 在PCA中有遇到,在这里记录一下计算矩阵的特征值个特征向量,下面给出几个示例代码:在使用前需要单独import一下>>>
- 时间戳的问题我们的微博应用的一个忽略了很久的问题就是日间和日期的显示。直到现在,我们在我们的User和Post对象中使用Pyth
- 英文的文档在这里,详细全面,本文仅为自己的学习笔记,只是试图通过转述加深自己的学习,不详细不全面。由于浏览器之间的差异,所以在JS中监听事件
- ⭐️ requests的使用(一) 大家好,今天就来说说requests的基础用法。requests是一个很实用的Python H
- 在用JS编写动画的时候,经常用会到布局转换,即在运动前将相对定位转为绝对定位,然后执行动画函数。下面给大家分享一个运用原生JS实现的布局转换
- 本文实例分析了javascript定义变量时带var与不带var的区别。分享给大家供大家参考。具体分析如下:直接看实例里说明:<scr
- 1、在 Windows 设置临时环境变量 cmd命令窗口 输入 path=%path%;E:\soft\python-3.5.2-embed
- 简单的说:装饰器主要作用就是对函数进行一些修饰,它的出现是在引入类方法和静态方法的时候为了定义静态方法出现的。例如为了把foo()函数声明成
- 网站能切换几套CSS风格早已不是什么新鲜事了。大家也都知道怎么去弄。早上发现一个有意思得站点 http://www.leemunroe.co
- 最近公司准备扩张海外业务,所以要给 Django 系统添加 国际化与本土化 支持。国际化一般简称 i18n ,代表 Internationa
- 保留COOKIES一个小时Response.Cookies("MyCookie").Expires= (now
- 本文实例讲述了Python使用scrapy采集数据时为每个请求随机分配user-agent的方法。分享给大家供大家参考。具体分析如下:通过这
- 七牛云存储的 Python 语言版本 SDK(本文以下称 Python-SDK)是对七牛云存储API协议的一层封装,以提供一套对于 Pyth