相田静 2020-04-20 17:57 采纳率: 0%
浏览 137

关于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 

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-20 17:40
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

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

报告相同问题?

悬赏问题

  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测