Python2D数组,打印分配循环中的单个元素与打印整个数组不同

Python2D数组,打印分配循环中的单个元素与打印整个数组不同,python,python-3.x,Python,Python 3.x,我遇到了一个非常奇怪的python问题,代码如下。我输入一个网格(二维数组) [[7,8,9],[4,5,6],[1,2,3]] 输入导入列表中的 def测试( 高度:int, 宽度:int, 网格:列表[列表[int]]: 打印(网格) refList=[[0]*宽度]*高度 对于范围内的h(0,高度): 对于范围内的w(0,宽度): 如果h==0且w==0: refList[h][w]=网格[h][w] elif(h

我遇到了一个非常奇怪的python问题,代码如下。我输入一个网格(二维数组)
[[7,8,9],[4,5,6],[1,2,3]]

输入导入列表中的

def测试(
高度:int,
宽度:int,
网格:列表[列表[int]]:
打印(网格)
refList=[[0]*宽度]*高度
对于范围内的h(0,高度):
对于范围内的w(0,宽度):
如果h==0且w==0:
refList[h][w]=网格[h][w]
elif(h<1):
refList[h][w]=refList[h][w-1]+网格[h][w]
elif(w<1):
refList[h][w]=refList[h-1][w]+网格[h][w]
其他:
refList[h][w]=网格[h][w]+max(refList[h-1][w],refList[h][w-1])
打印(回流列表[h][w])
打印(重新列表)
网格=[[7,8,9],[4,5,6],[1,2,3]]
测试(3,3,网格)
我期望产出
[[7,15,24],[11,20,30],[12,22,33]
。 正如您在下面看到的,循环中的print函数打印正确的答案,但是在循环完成并打印整个列表之后,它给了我这个
[[12,22,33],[12,22,33],[12,22,33]。
-基本上都是最上面一行

[[7, 8, 9], [4, 5, 6], [1, 2, 3]]
7
15
24
11
20
30
12
22
33
[[12, 22, 33], [12, 22, 33], [12, 22, 33]]

这里发生了什么?我如何解决这个问题?

由于浅拷贝,您正在试验一个问题。 你应使用:

refList=[[0表示范围内的i(宽度)]表示范围内的j(高度)]
替换当前的初始化行:

refList=[[0]*宽度]*高度
实际上,这最后一行创建了一个数组,该数组内部引用了同一个基于行的数组(
[[0]*width]
)。您可以使用以下代码轻松检查:

refList=[[0]*3]*3
打印(refList[0]是refList[1])#打印为真

由于浅拷贝,您正在试验一个问题。 你应使用:

refList=[[0表示范围内的i(宽度)]表示范围内的j(高度)]
替换当前的初始化行:

refList=[[0]*宽度]*高度
实际上,这最后一行创建了一个数组,该数组内部引用了同一个基于行的数组(
[[0]*width]
)。您可以使用以下代码轻松检查:

refList=[[0]*3]*3
打印(refList[0]是refList[1])#打印为真