gpt4 book ai didi

Python:+= 运算符和追加运算符之间的差异

转载 作者:太空宇宙 更新时间:2023-11-03 18:36:56 25 4
gpt4 key购买 nike

我只是在解释器中尝试一些东西,我注意到列表上的以下操作之间存在一些差异,我想知道是否有人可以解释为什么输出不同。非常感谢任何帮助!

假设我创建两个列表 a 和 b(并且我总是在以下 3 种情况之前从这段代码开始):

>>> a=[1,2]
>>> b=[3]
>>> a.append(b)
>>> a
[1, 2, [3]]

当我将另一个元素追加/添加到列表 b 中时,有时它会反射(reflect)在列表 a 中,有时则不会,具体取决于我使用的操作(如下所示):

案例 1:使用 += 运算符

>>> b+=[5]
>>> a
[1, 2, [3, 5]]

情况 2:使用 = 运算符

>>> b=b+[5]    
>>> a
[1, 2, [3]]

案例3:使用append:

>>> b.append(5)
>>> a
[1, 2, [3, 5]]

有人可以解释为什么 a 的值有时不会更新以反射(reflect) b 的新值,具体取决于您使用的运算符?这有点令人困惑,尤其是因为我一直假设 b+=x 与 b= b+x 做同样的事情。如果有人能为我指出不同操作的一些文档的方向,那就太好了(从我到目前为止所读到的内容来看,我只了解运算符(operator)应该做什么,而不了解他们如何做,我怀疑这是什么造成差异...)

最佳答案

b=b+[5] 创建一个新的列表对象并将其分配给名称 b。但列表a仍然引用原始列表。

b+=[5] 称为增强赋值,内部调用扩展函数,并且比串联更快。这不会创建新列表,而是使内存中的更改类似于列表上的追加调用。

关于Python:+= 运算符和追加运算符之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21374000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com