为什么为列表的切片分配新值可以更改python中的原始列表

时间:2017-11-11 12:01:28

标签: python

# sample 1
a = [1,2,3]
a[:] = [4,5,6]
print(a)
>>> [4,5,6]
# sample 2
a = [1,2,3]
a[:].append(4)
print(a)
>>> [1,2,3]

为什么会发生这种情况? a和a [:]的地址不同,它们连接的原因是什么?这两种解决方案有什么区别?

1 个答案:

答案 0 :(得分:3)

a[:]没有相同的含义/在两个示例中以不同的方式工作

在第一个例子中:

a[:] = [4,5,6]

您使用slice assignment分配给a。它会更改a的内容。这是完全更改列表而不更改其引用的一种方法。

在第二个例子中:

a[:].append(4)

a[:]创建列表的浅表副本,就像list(a)copy.copy(a)一样,然后代码会将4附加到此a的副本,因此,a并未发生变化。