使用带有受让人的切片表示法将值分配给列表

XNo*_*Nor 7 python list slice

我见过有人[:]用来制作列表的燕子副本,例如:

>>> a = [1,2,3,4]
>>> b = a[:]
>>> a[0] = 5
>>> print a
[5, 2, 3, 4]
>>> print b
[1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

我明白那个.但是,我在分配到列表时也看到了使用这种表示法的好处,例如:

>>> a = [1,2,3,4]
>>> b = [4,5,6,7]
>>> a[:] = b
>>> print a
[4, 5, 6, 7]
>>> print b
[4, 5, 6, 7]
Run Code Online (Sandbox Code Playgroud)

但我真的不明白为什么他们[:]在这里使用.我不知道有什么区别吗?

Ser*_*sta 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]
>>> 
Run Code Online (Sandbox Code Playgroud)

当你写作时a = b,a是对b的相同列表的引用:b中的任何更改都会影响a

当你写a[:] = b一个是用b的元素初始化的列表时:b的变化不会影响a


而且还之间的差异a[:] = ba = 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]
Run Code Online (Sandbox Code Playgroud)

使用a = b[:],如果另一个指向它的变量不受影响,则使用b中的元素创建一个新列表

有了a[:] = b,你改变了一个元素.如果指向它的另一个变量也被更改.