仅复制列表的值,而不复制容器本身

时间:2019-09-10 01:22:48

标签: python-3.x

我正在尝试创建列表的嵌套列表,并希望能够操纵列表中的单个元素。我在列表中填充了零,并希望能够通过索引每个元素将它们更改为其他值。

每次我为一个元素分配一个值时,整个行都会被分配一个新值,而不仅仅是一个元素。

有没有一种方法可以解决此问题,而无需使用小块数组?

# Expected output:
[[0,0,0,0,0],
[0,0,0,5,0],
[0,0,0,0,0]]

# Actual output:
[[0,0,0,5,0],
[0,0,0,5,0],
[0,0,0,5,0]]

我尝试使用[:]对列表进行切片以引用值,我尝试了深层复制,尝试了copy_list = list(org_list),但没有任何效果。

sample_list = [0]*5
sample_list = [sample_list]*3

copy_sample_list = copy.deepcopy(sample_list)
copy_sample_list = sample_list[:]
copy_sample_list = list(sample_list)
copy_sample_list[1][3] = 5

copy_sample_list

1 个答案:

答案 0 :(得分:0)

这是因为[[0]*5]*3表示对[0]*5列表的引用,因此,当您修改值时,整个列表将被更改。

尝试此代码:

sample_list = [[0]*5 for _ in range(3)]
copy_sample_list = sample_list.copy() 
copy_sample_list[1][3] = 5

输出:

[[0,0,0,0,0],
[0,0,0,5,0],
[0,0,0,0,0]]