应用列表方法和在列表切片上重新分配有什么区别

问题描述 投票:0回答:1

我不知道问这个问题是否合适。作为Python的新学习者,我试图在我正在使用的教科书和互联网上寻找答案。但我还是不太清楚。

我在学习列表方法时尝试过这些代码:

a = list('zyx')
a[:].pop()
print(a)
a = list('zyx')
a[:].append('o')
print(a)
a = list('zyx')
a[:].clear()
print(a)
a = list('zyx')
a[:] = []
print(a)

我得到的结果是:

['z', 'y', 'x']
['z', 'y', 'x']
['z', 'y', 'x']
[]

让我困惑的是列表方法和重新分配都改变了列表切片,但为什么后者影响原始列表而前者没有。

我在网上搜索了好几天,目前来看,我知道可能是浅拷贝,但我不能确切地说出原因。

一定是我的知识有限,让我无法找到答案。我能得到更多线索来让我清楚这一点吗?

python list slice mutable shallow-copy
1个回答
0
投票

了解下面的方法可能是成功的关键:

表达式中使用的切片(例如

a[:]
)调用
list.__getitem__(slice(None, None))
,其中
None, None
是切片的开始和结束。

在带有切片的列表上调用

__getitem__
会返回由该切片组成的新列表对象(浅拷贝)。

等号左侧的切片称为

list.__setitem__(slice(None, None), value)
。换句话说,它修改了现有列表。

© www.soinside.com 2019 - 2024. All rights reserved.