我不知道问这个问题是否合适。作为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']
[]
让我困惑的是列表方法和重新分配都改变了列表切片,但为什么后者影响原始列表而前者没有。
我在网上搜索了好几天,目前来看,我知道可能是浅拷贝,但我不能确切地说出原因。
一定是我的知识有限,让我无法找到答案。我能得到更多线索来让我清楚这一点吗?
了解下面的方法可能是成功的关键:
表达式中使用的切片(例如
a[:]
)调用 list.__getitem__(slice(None, None))
,其中 None, None
是切片的开始和结束。
在带有切片的列表上调用
__getitem__
会返回由该切片组成的新列表对象(浅拷贝)。
等号左侧的切片称为
list.__setitem__(slice(None, None), value)
。换句话说,它修改了现有列表。