关于python3的List乘法的小疑问

我们知道将一个list传入函数后,若函数内部对实参修改,形参也会随之改变.因为list是可变对象,numpy的array也是可变对象.
但是这段代码中,我使用了乘法构造了matrix2,并转换为nparray.
网上说:
*操作符对于不可变对象很安全,但对于可变对象,可能就不是你期望的结果了。因为不可变对象是复制值,而可变对象是复制引用。

这里的matrix2_np是由matrix2转换过来的,按理说也是第二列复制的第一列的引用,但是它的值为什么没有改变?

请教各位大佬,谢谢。

import numpy as np
# 列表定义的两行三列的0矩阵
row = 2
col = 3
matrix1 = [[0 for i in range(col)] for j in range(row)]
matrix2 = [[0] * col] * row

def print_matrix(mat):
    for row in range(len(mat)):
        for col in range(len(mat[0])):
            print(mat[row][col], end=" ")
            if col == len(mat[0]) - 1:
                print("")
    print("")


print_matrix(matrix1)
print_matrix(matrix2)

matrix1[0][0] = 1
print_matrix(matrix1)

matrix2[0][0] = 1
# 可以看到第0列都变成1了,猜想是因为 *
print_matrix(matrix2)

# 改回原来的数组
matrix2[0][0] = 0
matrix2_np = np.array(matrix2)
print_matrix(matrix2_np)

# 这里只有第0行第0列变成0了,为什么*失效了?
# 见输出的最后一行

matrix2_np[0][0] = 1
print_matrix(matrix2_np)

输出如下:

0 0 0 
0 0 0 

0 0 0 
0 0 0 

1 0 0 
0 0 0 

1 0 0 
1 0 0 

0 0 0 
0 0 0 

1 0 0 
0 0 0 

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^