在python中尝试旋转矩阵时输出不正确

在python中尝试旋转矩阵时输出不正确,python,matrix,Python,Matrix,我试图在python中将矩阵(二维列表)顺时针旋转90度。这是我的密码: def rotate(matrix): length = len(matrix) new_matrix = [[0]*length]*length for i in range(length): for j in range(length): new_matrix[j][length-1-i] = matrix[i][j]

我试图在python中将矩阵(二维列表)顺时针旋转90度。这是我的密码:

def rotate(matrix):
     length = len(matrix)
     new_matrix = [[0]*length]*length
     for i in range(length):
         for j in range(length):
             new_matrix[j][length-1-i] = matrix[i][j]
             print("new_matrix[",j,"][", length-1-i,"]", "is", new_matrix[j][length-1-i])
     for i in range(length):
         for j in range(length):
             print(new_matrix[i][j])
     return new_matrix
print(rotate([[1 ,2], [3, 4]]))
想法很简单,旋转后,以i,j作为行号和列号的元素将以j,length-1-i作为行号和列号

print语句用于验证我做得对。我尝试了[[1,2],[3,4]],但我得到了一个错误的答案和一个相当混乱的输出:

new_matrix[ 0 ][ 1 ] is 1
new_matrix[ 1 ][ 1 ] is 2
new_matrix[ 0 ][ 0 ] is 3
new_matrix[ 1 ][ 0 ] is 4
4
2
4
2
[[4, 2], [4, 2]]
看起来值1和3不知怎么被覆盖了。当我尝试[[1,2,3],[4,5,6],[7,8,8]]时,新的矩阵变成了
[[9,6,3],[9,6,3],[9,6,3]
。所以这里肯定有问题


知道为什么吗?

代码中的问题是这一行

new_matrix = [[0]*length]*length
它并没有做你想做的事情——它实际上创建了一个
长度
相同内部列表的数量的列表

将其替换为以下类似的内容,这将创建不同的内部列表

new_matrix = [[0]*length for _ in range(length)]

啊。这就是为什么。我想我找到了一种更简洁的方法来创建二维列表。。谢谢