Python 将数组添加到数组中而不影响数组中的元素
Iam是python中的beginer。Iam试图在列表中添加数组,但当我更新该数组并再次将其附加到列表时,先前附加的数组也会更新。为什么会发生这种情况Python 将数组添加到数组中而不影响数组中的元素,python,arrays,list,Python,Arrays,List,Iam是python中的beginer。Iam试图在列表中添加数组,但当我更新该数组并再次将其附加到列表时,先前附加的数组也会更新。为什么会发生这种情况 list_of_sol=[] a=[] a.append(1) list_of_sol.append(a) a.append(2) list_of_sol.append(a) print list_of_sol 我期望的输出是[[1],[1,2]],但输出是[[1,2],[1,2]]。您正在将引用附加到列表对象a。 这可以通过列表中两个元素的
list_of_sol=[]
a=[]
a.append(1)
list_of_sol.append(a)
a.append(2)
list_of_sol.append(a)
print list_of_sol
我期望的输出是[[1],[1,2]],但输出是[[1,2],[1,2]]。您正在将引用附加到列表对象
a
。
这可以通过列表中两个元素的id()
进行验证
>>> id(list_of_sol[1])
# 140477592091464
>>> id(list_of_sol[0])
# 140477592091464
因此,最终会附加单个对象的两个实例,而不是纯值。可以使用
list\u of_sol.append(list(a))
实现预期行为如果您想要您所说的预期输出,请按以下方式操作:
list_of_sol=[]
a=[]
a.append(1)
list_of_sol.append(a[:])
a.append(2)
list_of_sol.append(a)
print list_of_sol
这可能与复制和深度复制有关: 附加(a)将a的副本放在a的列表中,并且此副本列表[0]与a引用在同一位置,您可以使用id(列表[0])==id(a)测试它 您可以检查以下内容:
from copy import deepcopy
list_of_sol=[]
a=[]
a.append(1)
list_of_sol.append(deepcopy(a[:])) #here changed
a.append(2)
list_of_sol.append(deepcopy(a)) #here changed
print list_of_sol