Python:列出和复制它们

时间:2014-12-26 15:24:57

标签: python list

我无法解释以下行为:

l1 = [1, 2, 3, 4]
l1[:][0] = 888
print(l1) # [1, 2, 3, 4]
l1[:] = [9, 8, 7, 6]
print(l1) # [9, 8, 7, 6]

似乎是l1[:][0]指的是副本,而l1[:]指的是对象本身。

2 个答案:

答案 0 :(得分:13)

这是由python的功能引起的,它允许你将列表分配给另一个列表,即

l1 = [1,2,3,4]
l1[:2] = [9, 8]
print(l1)

l1的前两个值分别设置为98。类似地,

l1[:] = [9, 8, 7, 6]

l1的所有元素指定新值。


有关the docs中作业的详细信息。

答案 1 :(得分:7)

l1[:][0] = 888首先获取l1l1[:])中所有元素的片段,其中(根据列表语义)返回包含{{1}中所有对象的新列表对象这是l1的浅表副本。

然后用整数l1888)替换该复制列表的第一个元素。

然后,复制的列表将被丢弃,因为没有任何操作。

您的第二个示例[0] = 888 l1[:] = [9, 8, 7, 6]中的所有元素替换为列表l1中的所有元素。这是一个切片分配。