如何复制由列表类型元素组成的列表?我使用了类似问题how to clone a list?中所述的方法,但仍然无法正常工作,如下图所示
原始代码是
asd
a = [[]]
b = list(a)
for i in [1,2]:
for j in b:
j.append(i)
print a
a
更改后,b
为什么会更改?但我想避免更改a
。
要求:由于我在leetcode.com中遇到此问题,因此无法导入诸如copy
之类的软件包。
最后,答案是我需要列表的深层副本,即
b = [c[:] for c in a]
。注意:正如下面注释区域中提到的@ PM2Ring,b = [c[:] for c in a]
仅适用于单个嵌套级别。对于更复杂的深层复制,请查找短语“深层复制”。感谢您的所有帮助。
答案 0 :(得分:2)
使用copy
:
import copy
a = [[]]
b = copy.copy(a) # b = a[:] using slicing is a lot faster
for i in [1,2]:
for j in b:
j.append(i)
print(a)
print(b)
不带包,使用slicing
:
a = [[]]
b = a[:] # b = a.copy() Could also come in handy
for i in [1,2]:
for j in b:
j.append(i)
print(a)
print(b)
输出:
[[1, 2]]
[[1, 2]]
答案 1 :(得分:1)
import copy
lis = [[1], [2]]
deep_list = copy.deepcopy(lis)
copy_list = copy.copy(lis)
print(deep_list is lis)
print(deep_list[0] is lis[0])
print(deep_list[1] is lis[1])
print(copy_list is lis)
print(copy_list[0] is lis[0])
print(copy_list[1] is lis[1])
在上面的代码中,deepcopy()
创建了list
的深层副本,因此您和copy()
创建了浅层副本。如果是deepcopy()
,列表中的列表也将被复制。
输出:
False
False
False
False
True
True
编辑:由于您可能无法导入库,因此您可以尝试以下方法:
lis = [[1], [2]]
deep_list = []
for item in lis:
deep_list.append(item[:])
print(deep_list is lis)
print(deep_list[0] is lis[0])
print(deep_list[1] is lis[1])
输出:
False
False
False
答案 2 :(得分:-2)
import copy
....
b = copy.copy(a)
...