Python列表-L1 + = [5]和L1 = L1 + [5]的不同结果[重复]

Posted

技术标签:

【中文标题】Python列表-L1 + = [5]和L1 = L1 + [5]的不同结果[重复]【英文标题】:Python Lists - different results for L1+=[5] and L1 = L1+[5] [duplicate] 【发布时间】:2014-05-20 04:15:10 【问题描述】:

我已经了解了列表的可变性,并试图了解它是如何工作的。 然而,我发现了一些新的东西:

x = [1, 2, 3]
y = x
print x # [1, 2, 3]
y += [3, 2, 1]
print x # [1, 2, 3, 3, 2, 1]

一切正常

但是,如果我将 y += [3,2,1] 替换为 y = y + [3,2,1],我会得到以下结果:

x = [1, 2, 3]
y = x
print x # [1, 2, 3]
y = y+ [3, 2, 1]
print x # [1, 2, 3]

这不是我所期望的。谁能告诉我 y+= 如何给出不同的结果?

【问题讨论】:

【参考方案1】:

当你这样做时:

y = y+ [3, 2, 1] 

您正在使用新引用创建一个新列表 y,这不会影响旧列表。

【讨论】:

【参考方案2】:

以前有人回答过,但长话短说:

x = x + y 意味着基本上将x+y 分配给x(所以x 引用了一个新对象)

x += y 表示将y 添加到x(所以x 仍然引用同一个对象)

【讨论】:

以上是关于Python列表-L1 + = [5]和L1 = L1 + [5]的不同结果[重复]的主要内容,如果未能解决你的问题,请参考以下文章

python 列表合并

Python学习教程:Python列表赋值,复制,深拷贝及5种浅拷贝详解

Python3.5深浅拷贝问题

在python中结合两个列表[关闭]

yield列表反转 islice切片(2.6)

Python列表中去重的多种方法