我初始化了一个空的2d数组,如下所示:
matrixLength = (len(a)+1)*(len(b)+1)
matrix = []
step = []
for i in range(matrixLength):
matrix.append(step)
当我打印它时,它给了我这个:
[[], [], [], [], [], [], [], [], [], [], [], [], [], [], [], []]
到目前为止一切顺利。但是,当我想迭代2d数组的第一个Len(a)元素时,使用以下代码:
for i in range(0, len(a)+1):
print(i)
matrix[i].append(i)
print (matrix)
而不是只填充第一个len(a)元素的数组,如下所示:
[[0], [1], [2], [3], [], [], [], [], [], [], [], [], [], [], [], []]
我得到了这个:
[[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]
为什么?
答案 0 :(得分:1)
当您将step
设置为[]
时,您会创建对列表类型的一个实例的引用,因此当您使用matrix
附加step
时,您将相同的引用放入所有职位。您可以通过打印所有矩阵元素id轻松验证这一点:
for el in matrix:
print(id(el))
您需要为每个元素创建不同的列表:
matrixLength = (len(a)+1)*(len(b)+1)
matrix = []
for i in range(matrixLength):
matrix.append(list())
然后您就可以独立更新每个列表了。