如何避免Python中的列表别名

如何避免Python中的列表别名,python,list,Python,List,这真让人讨厌。我使用原始列表中的元素创建了一个子列表。然后,当我改变子列表时,原始列表也会改变,即使它们应该位于不同内存位置的不同对象中 data = [['male', 'weak'], ['female', 'weak'], ['female', 'strong']] subdata = [] for i in data: if(i[1] == 'weak'): subdata.append(i) subdata[0].pop(0) print(subdata) pr

这真让人讨厌。我使用原始列表中的元素创建了一个子列表。然后,当我改变子列表时,原始列表也会改变,即使它们应该位于不同内存位置的不同对象中

data = [['male', 'weak'], ['female', 'weak'], ['female', 'strong']]
subdata = []
for i in data:
    if(i[1] == 'weak'):
        subdata.append(i)
subdata[0].pop(0)
print(subdata)
print(data)
使用[:]复制子列表可以:

输出:

[['weak'], ['female', 'weak']]
[['male', 'weak'], ['female', 'weak'], ['female', 'strong']]
[['weak'], ['female', 'weak']]
[['male', 'weak'], ['female', 'weak'], ['female', 'strong']]
您的原始输出:

['weak'], ['female', 'weak']]
[['weak'], ['female', 'weak'], ['female', 'strong']]
如果子列表包含嵌套更深的列表,请使用copy.deepcopy:

输出:

[['weak'], ['female', 'weak']]
[['male', 'weak'], ['female', 'weak'], ['female', 'strong']]
[['weak'], ['female', 'weak']]
[['male', 'weak'], ['female', 'weak'], ['female', 'strong']]

subdata.append[]+i追加与列表i关联的新列表引用,因此对子数据的更改不会影响数据。您需要制作一个副本。将行subdata.appendi更改为subdata.appendi[:]