For loop 不应该';循环是否会在矩阵中添加一个、两个、三个数字?

For loop 不应该';循环是否会在矩阵中添加一个、两个、三个数字?,for-loop,matrix,nested-loops,For Loop,Matrix,Nested Loops,所以我是大学一年级的新开发者。在完成一个实验时,我犯了一个打字错误,导致了一个奇怪的输出。我修正了错误,但我仍然对打字错误的结果感兴趣。它产生了意想不到的结果。我已经想了好几天了,只是不明白为什么结果和我预期的不一样 #我遗漏了什么?将数组的变量视为一个内存位置,类似于引用。当您向矩阵添加数组“a”时,矩阵数组只记住a的地址,当您向“a”添加数据并对“a”进行更改时,矩阵中引用“a”的前一个索引实际上会更改。在第一个循环中,每次迭代都会重置数组“a”的内存,因此矩阵中只保存了数组“a”的3个副本

所以我是大学一年级的新开发者。在完成一个实验时,我犯了一个打字错误,导致了一个奇怪的输出。我修正了错误,但我仍然对打字错误的结果感兴趣。它产生了意想不到的结果。我已经想了好几天了,只是不明白为什么结果和我预期的不一样


#我遗漏了什么?

将数组的变量视为一个内存位置,类似于引用。当您向矩阵添加数组“a”时,矩阵数组只记住a的地址,当您向“a”添加数据并对“a”进行更改时,矩阵中引用“a”的前一个索引实际上会更改。在第一个循环中,每次迭代都会重置数组“a”的内存,因此矩阵中只保存了数组“a”的3个副本

假设设置a=[]时,a有一个新的内存位置,总共有a、a2和a3。循环末尾的矩阵数组具有值[a、a、a、a2、a2、a2、a3、a3、a3],因为在所有迭代之后打印最终结果,所以每个a、a2、a3引用的值都是相同的

如果您觉得很难理解,请尝试运行此代码

def matrixInput():
  matrix=[]
  print("Enter the elements row-wise: ")
  for i in range(0,3):
    a = []
    for j in range(0,3):
      a.append(int(input()))
      matrix.append(a) #this line should have been back one tab, this was a typo mistake...however left like this, the code is running in an unexpected way
  print((matrix))


print(matrixInput())

#this code's output:
Enter the elements row-wise: 
1
2
3
4
5
6
7
8
9
[[1, 2, 3], [1, 2, 3], [1, 2, 3], [4, 5, 6], [4, 5, 6], [4, 5, 6], [7, 8, 9], [7, 8, 9], [7, 8, 9]]
None

#shouldn't it print:
#[[1],[1,2],[1,2,3],[4],[4,5],[4,5,6],[7],[7,8][7,8,9]]...??


请不要以图片形式发布代码。使用代码块代替。谢谢你的建议。我与这个网站没有太多的互动。我不明白为什么这会令人惊讶-你将每个
a
附加到
matrix
三次而不是一次。是的,但是你第一次附加,什么是a…不是[1]这个代码的结果是2然后是2,3。。。。上面的代码不应该是一样的吗?简单地说,当你对“a”进行更改时,已经存储的“a”的结果将相应地更改。所以你说的是矩阵存储的是“a”,而不是输入“2”或“3”。对吗?我想我明白了……非常感谢。这似乎是未来需要注意的一个重要问题。是的,因为a是一个数组,数组使用内存位置/地址,而不像整数那样使用固定值。我建议在C或C++中使用编程课程,然后你就会明白这一切是什么。我们的C课程刚刚开始。看来我可能还需要一些Youtube视频作为补充。再次感谢。
matrix = []
a = []
a.append(2)
matrix.append(a)   # matrix has [a]   a = [2]
print(matrix)      # matrix prints as [2]
a.append(3)
matrix.append(a)   # matrix has [a,a] a = [2,3]
print(matrix)      # matrix prints as [[2,3],[2,3]] instead of [[2],[2,3]], because matrix only knows [a,a] and a is [2,3] when this line is called