繁体   English   中英

将简单的python列表行为与+ =混淆

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM