我见过有人使用 [:]
来复制列表,例如:
>>> a = [1,2,3,4]
>>> b = a[:]
>>> a[0] = 5
>>> print a
[5, 2, 3, 4]
>>> print b
[1, 2, 3, 4]
我明白了。但是,我也看到人们在分配给列表时也使用这种表示法,例如:
>>> a = [1,2,3,4]
>>> b = [4,5,6,7]
>>> a[:] = b
>>> print a
[4, 5, 6, 7]
>>> print b
[4, 5, 6, 7]
但我真的不明白为什么他们在这里使用[:]
。有什么我不知道的区别吗?
a[:] = b
和 a = b
确实有区别。
>>> a = [1,2,3,4]
>>> b = [4,5,6,7]
>>> c = [8,9,0,1]
>>> c = b
>>> a[:] = b
>>> b[0] = 0
>>> a
[4, 5, 6, 7]
>>> c
[0, 5, 6, 7]
>>>
当你写 a = b
时,a 是对与 b 相同的列表的引用:b 中的任何更改都会影响 a
当你写a[:] = b
时,a是一个用b的元素初始化的列表:b的改变不会影响a
a[:] = b
和 a = b[:]
也有区别。
>>> a = [1,2,3,4]
>>> b = [4,5,6,7]
>>> c = a
>>> a = b[:]
>>> a
[4, 5, 6, 7]
>>> c
[1, 2, 3, 4]
>>> a = [1,2,3,4]
>>> b = [4,5,6,7]
>>> c = a
>>> a[:] = b
>>> a
[4, 5, 6, 7]
>>> c
[4, 5, 6, 7]
使用 a = b[:]
,您可以使用 b 中的元素创建一个新列表,如果另一个变量指向 a,则它不受影响
使用 a[:] = b
,您可以更改 a 的元素。如果另一个变量指向 a,它也会改变。