无法理解Python 2D矩阵的输出

无法理解Python 2D矩阵的输出,python,python-3.x,matrix,spiral,Python,Python 3.x,Matrix,Spiral,我正在尝试以螺旋格式打印值1到9,如下所示: [1,2,3] [8,9,4] [7,6,5] res = [[0]*n for i in range(n)] 然而,当我试图通过Python脚本(写在下面)打印它时,它会覆盖它。我得到了正确的索引和值。我只是无法将这些值分配给正确的索引。剧本是: n = 3 res = [[0]*n]*n count = 1 def getcoord(r1,c1,r2,c2): for c in range(c1, c2+1

我正在尝试以螺旋格式打印值1到9,如下所示:

[1,2,3]
[8,9,4]
[7,6,5]
res = [[0]*n for i in range(n)]
然而,当我试图通过Python脚本(写在下面)打印它时,它会覆盖它。我得到了正确的索引和值。我只是无法将这些值分配给正确的索引。剧本是:

n = 3
res = [[0]*n]*n

    count = 1

    def getcoord(r1,c1,r2,c2):
        for c in range(c1, c2+1):
            yield r1, c
        for r in range(r1+1, r2+1):
            yield r,c2
        if r1 < r2 and c1 < c2:
            for c in range(c2-1, c1-1, -1):
                yield r2,c
            for r in range(r2-1, r1, -1):
                yield r, c1


    r1 = 0
    r2 = n-1
    c1= 0
    c2 = n-1
    val = 1
    while r1<=r2 and c1<=c2:
        for r,c in getcoord(r1,c1,r2,c2):
            print(r,c)
            print("val", val)
            res[r][c] = val
            print("res", res)
            val += 1
        r1 += 1; r2 -= 1
        c1 += 1; c2 -= 1
    return res
我错过了什么?为什么我不能为正确的索引分配正确的值,尽管它们都有?
提前谢谢

[0]*n
创建一个包含3个零的列表:
[0,0,0]

然后,
res=[[0]*n]*n
创建一个列表,您可以将其命名为
res
,该列表包含三倍于我们刚才创建的相同的列表

因此,无论您是通过名称
res[0]
res[1]
还是
res[2]
来引用它,您都可以访问相同的、唯一的列表

执行
res[0][0]=1更新此列表的第一个元素,
res[2][0]=7
再次更新同一元素

当打印
res
时,您将得到相同列表的三倍

您需要的是三个不同的列表。您可以这样创建它们:

[1,2,3]
[8,9,4]
[7,6,5]
res = [[0]*n for i in range(n)]

[0]*n
创建一个包含3个零的列表:
[0,0,0]

然后,
res=[[0]*n]*n
创建一个列表,您可以将其命名为
res
,该列表包含三倍于我们刚才创建的相同的列表

因此,无论您是通过名称
res[0]
res[1]
还是
res[2]
来引用它,您都可以访问相同的、唯一的列表

执行
res[0][0]=1更新此列表的第一个元素,
res[2][0]=7
再次更新同一元素

当打印
res
时,您将得到相同列表的三倍

您需要的是三个不同的列表。您可以这样创建它们:

[1,2,3]
[8,9,4]
[7,6,5]
res = [[0]*n for i in range(n)]

哇!真不知道这样的事会引起这么多麻烦!谢谢你,蒂埃里!哇!真不知道这样的事会引起这么多麻烦!谢谢你,蒂埃里!