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]
生成一个新的列表,该列表等于L
4添加到最后.然后将此新列表分配回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)