带有重复元素的列表的Python深度复制

时间:2019-02-25 04:09:53

标签: python

我知道列表的复制和深度复制。但是,这个问题有点不同,因为我的原始列表是通过乘以元素生成的。

首先,我通过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的列表中没有重复的元素。

2
list_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)

此方法迭代列表的元素。这种方法会破坏列表的结构吗?

1 个答案:

答案 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]]