python 中列表创建的差异

difference in list creation in python

我正在尝试创建任意大小的嵌套列表 N X M

假设 N = 3,M = 3 当我创建这样的列表时

c = [0 for col in range(N)]   
c = [c for r in range(M)]  
print c

并执行

c[0][0]=1

我明白了

c = [[1, 0, 0], [1, 0, 0], [1, 0, 0]]

但是当我创建这样的列表时:

c = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]

并执行

c[0][0] = 1

我明白了

c = [[1, 0, 0], [0, 0, 0], [0, 0, 0]]

我是 python 的新人,有人可以给我一些想法吗?

在列表理解中,您正在创建对列表中每个元素的引用。这意味着当只访问和更新一个索引时,每个元素都会发生变化。

c = [0 for col in range(3)]
c = [c for r in range(3)]  

c[0][0] = "Test"

输出:

[['Test', 0, 0], ['Test', 0, 0], ['Test', 0, 0]]

编辑:

任意大小的嵌套列表:

import random

new_list = [[0 for i in range(random.randint(1, 10))] for b in range(random.randint(1, 10))]

输出:

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

每个列表都是一个对象.... 在您的第一种情况下,您正在创建一个列表对象并使用引用变量 'c' 引用它。 因此,每当您更改 'c' 中的特定元素时,它都会反映在主列表中。

第一个案例

c = 列表([0,0,0]) c = 列表([c,c,c])

因此,如果您更改一个 'c' 中的元素,它会反映在所有