python - 使用带受让人的切片表示法为列表赋值

标签 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]

我明白了。但是,我也看到人们在分配给列表时也使用这种表示法,例如:

>>> 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[:] = ba = 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[:] = 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]

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

使用 a[:] = b,您可以更改 a 的元素。如果另一个变量指向 a,它也会改变。

关于python - 使用带受让人的切片表示法为列表赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32140484/

相关文章:

java - 如何在 java 中正确执行二进制 switch 语句?

python - (Python) 列表中切片函数的行为

Python Traits UI (Enthought)

python - Python中如何检查String是否有相同的字符

python - 列表的 python 迭代器实际上是如何工作的?

python - 遍历列表并检查我是否在列表末尾

Python pandas read_excel方法KeyError 'show'

python - 查找 scipy.sparse 矩阵中的第一个非零列

javascript - "var links = [].slice.apply(document.getElementsByTagName(' a'));"真的是做什么的?

Python列表每n进行n-2切片