我正在阅读一本关于Python的书,他们最初引入了列表切片,以创建列表的完整副本的方式,而不仅仅是参考。但是,在本书的后面提供了一个示例,其中他们更改了列表切片,并且先前实例化的列表也进行了更改,即如果仅复制引用,您将期望的行为类型。
在下面,我将为每件事提供两个简单的示例。
我已经仔细检查了切片是否返回了具有不同ID的新复制列表,而我发现的所有内容都表明它确实返回了唯一列表,而不仅仅是引用。
本书中引入了第一段代码,以将列表内容复制到新列表中。
exList = ['0', '1', '2', '3']
exCopy = exList[:]
我目前对此有所了解,因为分片运算符返回一个包含exList
内容的新列表,然后将其分配给exCopy
。
下一个代码片段将更改列表切片的内容,这也将更改完整列表。根据我以前的理解,我认为对切片列表的更改不会改变列表本身,因为切片将代表其自己的唯一列表副本(同样不是引用,而是列表副本)。
aliens = []
for alien_Number in range(30):
new_alien = {'color': 'green', 'points': 5, 'speed': 'slow'}
aliens.append(new_alien)
for alien in aliens[:3]:
if alien['color'] == 'green':
alien['color'] = 'yellow'
for alien in aliens[:5]:
print(alien)
print("...")
答案 0 :(得分:1)
切片会创建一个副本。易于测试的示例:
def sumOfLeftLeaves(num):
mytotal = 0
def helper():
nonlocal mytotal
mytotal = mytotal + num
helper()
return mytotal
inum = 100
print(sumOfLeftLeaves(inum))
结果是:
a = [1,2,3]
b = a[:]
b[1] = 5
print('b',b)
print('a',a)