list4=[7,8]
def proc3(mylist):
mylist+=[9]
print list4
proc3(list4)
print list4
为什么这段代码会产生答案[7,8]和[7,8,9]?我期待[7,8]和[7,8]。 不是mylist + = [9]连接数字9并仅创建一个新的列表作为局部变量?为什么运行proc3(list4)之后的“print list4”,但在程序之外,不会导致原始列表?我必须在这里遗漏一些明显的东西。在此先感谢您的帮助。
答案 0 :(得分:3)
+=
不会返回新的列表对象。相反,它会就地修改原始列表对象。
换句话说,proc3
内的这一行:
mylist+=[9]
正在修改mylist
引用的列表对象。因此,它不再是[7, 8]
而是[7, 8, 9]
。
答案 1 :(得分:1)
在另一篇文章中引用this answer:
一切都是Python的参考。如果您希望避免这种行为,则必须使用
list()
创建原始文件的新副本。如果列表包含更多引用,则需要使用deepcopy()
:
让我们:
list4 = [7, 8]
def proc3(mylist):
print id(list4)
mylist += [9]
print id(list4)
print list4
print id(list4)
proc3(list4)
print id(list4)
print list4
这将打印:
[7, 8]
36533384
36533384
36533384
36533384
[7, 8, 9]
正如您所看到的,它在每个时刻都是相同的列表。
答案 2 :(得分:0)
+=
运算符会修改对象。注意
x += y
与
有很大不同x = x + y
(请查看您的测试代码)