我只是在解释器中尝试了一些东西,我注意到列表上的以下操作之间存在一些差异,我想知道是否有人可以解释为什么输出不同。非常感谢任何帮助!
假设我创建了两个列表a和b(在以下每种情况下,我总是以这段代码开头):
>>> a=[1,2]
>>> b=[3]
>>> a.append(b)
>>> a
[1, 2, [3]]
当我将另一个元素追加/添加到列表b中时,有时它会反映在列表a中,有时它不会反映出来,这取决于我使用的操作(如下所示):
案例1:使用+ =运算符
>>> b+=[5]
>>> a
[1, 2, [3, 5]]
案例2:使用=运算符
>>> b=b+[5]
>>> a
[1, 2, [3]]
案例3:使用追加:
>>> b.append(5)
>>> a
[1, 2, [3, 5]]
有人可以解释为什么a的值有时不会更新以反映b的新值,具体取决于您使用的运算符?这有点令人困惑,特别是因为我一直认为b + = x与b = b + x的作用相同。如果有人能指出我为不同的操作提供一些文档的方向,那将是很棒的(从我到目前为止我所阅读的内容我只了解操作员应该做什么,而不是他们如何做,我怀疑是什么导致差异......)
答案 0 :(得分:1)
b=b+[5]
创建一个新的列表对象并将其分配给名称b。但是列表仍然是指原始列表。
b+=[5]
的 augmented assignment
在内部调用扩展函数,并且比串联更快。这不会创建新列表,但会使内存更改类似于列表中的追加调用。