[英]Confusing simple python list behavior with +=
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)之后但在过程之外的“打印list4”没有生成原始列表? 我一定在这里想念一些明显的东西。 在此先感谢您的帮助。
+=
不返回一个新的列表对象。 相反,它就地修改了原始列表对象。
换句话说,这行在proc3
内部:
mylist+=[9]
正在修改mylist
引用的列表对象。 结果,它不再是[7, 8]
而是[7, 8, 9]
。
在另一篇文章中引用此答案 :
一切都是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]
如您所见,每时每刻都是相同的列表。
+=
运算符修改对象。 注意
x += y
与
x = x + y
(检查您的测试代码)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.