Python 为什么此代码会更改两个列表(id不相同)?
我有以下清单:Python 为什么此代码会更改两个列表(id不相同)?,python,list,Python,List,我有以下清单: l1 = [['a2', 1], ['a2', 2], ['a2', 3], ['a2', 4], ['a2', 5]] membership = [0, 1, 1, 2, 3] 我有: l2 = l1[:] [item.append(membership[i]) for i, item in enumerate(l2)] 但这两个列表现在看起来都像: [['a2', 1, 0], ['a2', 2, 1], ['a2', 3, 1], ['a2', 4, 2], ['a2'
l1 = [['a2', 1], ['a2', 2], ['a2', 3], ['a2', 4], ['a2', 5]]
membership = [0, 1, 1, 2, 3]
我有:
l2 = l1[:]
[item.append(membership[i]) for i, item in enumerate(l2)]
但这两个列表现在看起来都像:
[['a2', 1, 0], ['a2', 2, 1], ['a2', 3, 1], ['a2', 4, 2], ['a2', 5, 3]]
我以为l1[:]会返回副本?l2=listl1的行为相同
返回
False
l1[:]只需创建l1的浅层副本,它不适用于嵌套列表。对于您需要的嵌套列表
注意:在列表理解中更改列表不是正确的方法。而是使用普通for循环
l1[:]只需创建l1的浅层副本,它不适用于嵌套列表。对于您需要的嵌套列表
注意:在列表理解中更改列表不是正确的方法。而是使用普通for循环
l1[:]使用与l1相同的项目创建一个新列表,即:idl1!=idl2,但idl1[0]==idl2[0],idl1[1]==idl2[1],…l1[:]使用与l1相同的项目创建一个新列表,即:idl1!=idl2,但idl1[0]==idl2[0],idl1[1]==idl2[1]。。。
False
>>> import copy
>>> l1 = [['a2', 1], ['a2', 2], ['a2', 3], ['a2', 4], ['a2', 5]]
>>> membership = [0, 1, 1, 2, 3]
>>> l2=copy.deepcopy(l1)
>>> [item.append(membership[i]) for i, item in enumerate(l2)]
[None, None, None, None, None]
>>> l1
[['a2', 1], ['a2', 2], ['a2', 3], ['a2', 4], ['a2', 5]]
>>> l2
[['a2', 1, 0], ['a2', 2, 1], ['a2', 3, 1], ['a2', 4, 2], ['a2', 5, 3]]
>>>
for i, item in enumerate(l2):
item.append(membership[i])