代码A:
lst = [1, 2, 3]
for i in range(10):
lst+= ["42"]
代码B:
lst = [1, 2, 3]
for i in range(10):
lst = lst + ["42"]
我知道输出是一样的,但两个列表的构建方式是否存在差异? 实际上后面发生了什么?
答案 0 :(得分:5)
当你这样做时
lst += ["42"]
您正在改变lst
并在其末尾追加“42”。但是,当你说,
lst = lst + ["42"]
您正在使用lst
和"42"
创建新列表,并将新列表的引用分配给lst
。试试这个程序可以更好地理解这一点。
lst = ["1"]
print(id(lst))
lst += ["2"]
print(id(lst))
lst = lst + ["3"]
print(id(lst))
前两个ID将是相同的,最后一个将是不同的。因为,创建了一个新列表,lst
现在指向该新列表。
当你将一个列表作为参数传递给一个函数并将一个项目附加到它时,不知道这两者之间的区别会产生一个问题,就像这样的函数
def mutate(myList):
myList = myList + ["2"] # WRONG way of doing the mutation
tList = ["1"]
mutate(tList)
print(tList)
你仍会获得['1']
,但如果你真的想改变myList
,你可以这样做
def mutate(myList):
myList += ["2"] # Or using append function
tList = ["1"]
mutate(tList)
print(tList)
将打印['1', '2']