LIST.append(1)和LIST = LIST + [1](Python)之间有什么区别

ait*_*tee 8 python list append

当我执行(我正在使用交互式shell)这些语句时,我得到了这个:

L=[1,2,3]
K=L

L.append(4)

L
[1,2,3,4]
K
[1,2,3,4]
Run Code Online (Sandbox Code Playgroud)

但是当我用L = L + [4]替换L.append(4)时,我得到了完全相同的东西:

L
[1,2,3,4]
K
[1,2,3]
Run Code Online (Sandbox Code Playgroud)

这是某种参考的东西吗?为什么会这样?

我注意到的另一个有趣的事情是L + = [4]就像.append,这是奇怪的,因为我认为它会像L = L + [4].

对所有这些的澄清将不胜感激.

谢谢

Joh*_*ica 16

L.append(4)
Run Code Online (Sandbox Code Playgroud)

这会在现有列表的末尾添加一个元素L.

L += [4]
Run Code Online (Sandbox Code Playgroud)

+=运营商调用魔术__iadd__()方法.原来list覆盖__iadd__()方法和使得它等同于extend()其中,像append(),直接添加元素到现有列表.

L = L + [4]
Run Code Online (Sandbox Code Playgroud)

L + [4]生成一个新的列表,该列表等于L4添加到最后.然后将此列表分配回L.因为您已创建新的列表对象,K所以此分配不会更改.

我们可以id()用来识别何时创建新的对象引用:

>>> L = [1, 2, 3]
>>> id(L)
152678284
>>> L.append(4)
>>> id(L)
152678284

>>> L = [1, 2, 3]
>>> id(L)
152680524
>>> L = L + [4]
>>> id(L)
152678316
Run Code Online (Sandbox Code Playgroud)


Mar*_*som 2

append直接修改列表。使用L=L+[4],您可以复制原始元素L并添加一个新元素,然后将该结果分配回L并打破其与 的等价性K

我不确定 的行为+=