这真的很烦人。我使用原始列表中的元素创建了一个子列表。然后,当我改变子列表时,原始列表也会发生变化,即使它们应该位于不同内存位置的不同对象中。
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)
复制带有[:]
的子列表:
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']]
[['weak'], ['female', 'weak'], ['female', 'strong']]
如果您的子列表包含更深嵌套的列表,请使用copy.deepcopy()
:
data = [['male', 'weak'], ['female', 'weak'], ['female', 'strong']]
subdata = []
for i in data:
if(i[1] == 'weak'):
subdata.append(copy.deepcopy(i))
subdata[0].pop(0)
print(subdata)
print(data)
输出:
[['weak'], ['female', 'weak']]
[['male', 'weak'], ['female', 'weak'], ['female', 'strong']]