我知道列表的复制和深度复制。但是,这个问题有点不同,因为我的原始列表是通过乘以元素生成的。
首先,我通过className
生成原始列表。
我要修改list_ori = [[0]*3]*3
,然后得到[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
我尝试使用以下代码。
[[1, 0, 0], [0, 0, 0], [0, 0, 0]]
因此,我得到了import copy
list_ori = [[0]*3]*3
list_copy = copy.deepcopy(list_ori)
list_copy[0][0] =1
print(list_copy)
。
但实际上,我想得到[[1, 0, 0], [1, 0, 0], [1, 0, 0]]
我有2个幼稚的解决方案,但是我想知道有没有更清晰的方法来处理[[1, 0, 0], [0, 0, 0], [0, 0, 0]]
并进行深度复制然后再进行修改?
两个幼稚的解决方案:
1个list_ori = [[0]*3]*3
我更改了列表的生成方法。list_ori的列表中没有重复的元素。
2list_ori = [[0 for i in range(3)] for j in range(3)]
list_copy = copy.deepcopy(list_ori)
list_copy[0][0] =1
print(list_copy)
此方法迭代列表的元素。这种方法会破坏列表的结构吗?
答案 0 :(得分:0)
首先使用list_ori = [[0 for i in range(3)] for j in range(3)]
,无需进行深度复制,只需执行以下操作:
list_ori = [[0 for i in range(3)] for j in range(3)]
list_copy[0][0] = 1
print(list_copy)
输出:
[[1, 0, 0], [0, 0, 0], [0, 0, 0]]