Python中遇到的一些小bugs

本文探讨了在Python中使用list和*运算符创建矩阵时的浅拷贝现象,揭示了`[[0]*n]*m`构造的矩阵为何会共享元素。通过实例对比,解释了为什么修改其中一个元素会导致其他所有元素同步变化,并介绍了深拷贝的概念。
摘要由CSDN通过智能技术生成

1. 如果我们要构造一个m * n的全零矩阵,以list构造出来的应当是这样:

m = 4
n = 3
zeros = [[0 for _ in range(n)] for _ in range(m)]

如果我们要修改其中的一个值:

zeros[0][0] = 1

那么我们可以得到相应matrix的结果:

然而,我们还有另外一种矩阵构造方式:

zeros2 = [[0] * n] * m

并且Python告诉我们:

但是,如果我们进行如下修改:

zeros2[0][0] = 1

 我们会发现:

zeros2的第一列全都变成1了!

这是因为,list的 * 运算其实是一种浅拷贝的机制。当我们进行 [obj] * n这样的构造时,Python只会把同一个obj的引用copy共n次,然后展开成一个数组。所以如果我们把数组中的某一个元素进行修改,那么数据中的其他元素(实际上都是一个元素)也会改变!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值