Python中表达式x += y和x = x+y 的区别详解

 更新时间:2017年06月20日 11:05:45   作者:hooog  
这篇文章主要跟大家介绍了关于Python中x += y和x = x+y 的区别的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。

前言

本文主要给大家介绍的是关于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中time、datetime模块的使用

    python中time、datetime模块的使用

    这篇文章主要介绍了python中time、datetime模块的使用,帮助大家更好的利用python处理时间,感兴趣的朋友可以了解下
    2020-12-12
  • pytorch如何实现逻辑回归

    pytorch如何实现逻辑回归

    这篇文章主要介绍了pytorch如何实现逻辑回归问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • python绘制雪景图

    python绘制雪景图

    这篇文章主要为大家详细介绍了python绘制雪景图,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • Python pandas dataframe之重命名相同列名

    Python pandas dataframe之重命名相同列名

    这篇文章主要介绍了Python pandas dataframe之重命名相同列名方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • 通过代码实例了解Python异常本质

    通过代码实例了解Python异常本质

    这篇文章主要介绍了通过代码实例了解Python1异常本质,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • 分布式爬虫scrapy-redis的实战踩坑记录

    分布式爬虫scrapy-redis的实战踩坑记录

    最近用scrapy-redis尝试了分布式爬虫,使用过程中也遇到了不少问题,下面这篇文章主要给大家介绍了关于分布式爬虫scrapy-redis的实战踩坑记录,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • Python 实现Numpy中找出array中最大值所对应的行和列

    Python 实现Numpy中找出array中最大值所对应的行和列

    今天小编就为大家分享一篇Python 实现Numpy中找出array中最大值所对应的行和列,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • python3解析库pyquery的深入讲解

    python3解析库pyquery的深入讲解

    做过前端开发的同志都应该知道或了解过jquery,jQuery 是一个用来处理DOM的JavaScript库。pyquery说白了就是jquery的Python版本。下面这篇文章主要给大家介绍了关于python3解析库pyquery的相关资料,需要的朋友可以参考下
    2018-06-06
  • Python实现如何根据文件后缀进行分类

    Python实现如何根据文件后缀进行分类

    本文主要为大家详细介绍了如何通过python实现根据文件后缀实现分类,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以关注一下
    2021-12-12
  • python 设置文件编码格式的实现方法

    python 设置文件编码格式的实现方法

    下面小编就为大家分享一篇python 设置文件编码格式的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12

最新评论