Ign*_*ams 75
在阅读时,list
是对原始列表的引用,并对列表进行list[:]
浅层复制.
分配时,list
(重新)绑定名称和list[:]
切片分配,替换先前列表中的内容.
此外,不要使用它list
作为名称,因为它会影响内置.
Mat*_*ell 23
后者是对列表副本的引用,而不是对列表的引用.所以它非常有用.
>>> li = [1,2,3]
>>> li2 = li
>>> li3 = li[:]
>>> li2[0] = 0
>>> li
[0, 2, 3]
>>> li3
[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
li[:] 创建原始列表的副本。但它并不引用同一个列表对象。因此,您不必冒险通过更改 li[:] 创建的副本来更改原始列表。
例如:
>>> list1 = [1,2,3]
>>> list2 = list1
>>> list3 = list1[:]
>>> list1[0] = 4
>>> list2
[4, 2, 3]
>>> list3
[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
这里list2
是通过改变而改变list1
但list3
不改变。
小智 5
另一个有用的例子是为列表和列表[:]分配不同的类型。例如,
l = [1,2,3]
a = numpy.array([4,5,6])
l = a
print(l)
Run Code Online (Sandbox Code Playgroud)
结果是一个 numpy 数组:
array([4, 5, 6])
Run Code Online (Sandbox Code Playgroud)
尽管,
l = [1,2,3]
a = numpy.array([4,5,6])
l[:] = a
print(l)
Run Code Online (Sandbox Code Playgroud)
结果是一个列表:
[4, 5, 6]
Run Code Online (Sandbox Code Playgroud)