关于python二维数组的一个坑

但我需要初始化一个n*n的二维数组时,我这样写了:

arr = [[0]*n]*n
然后呢,我就对这个二维数组进行了一些神奇的操作,可是呢,输出结果却跟计划的差别大大,这到底是为什么呢。我看到别人是这么定义的

arr = [[0] for _ in range(n) for _ in range(n)]
我在命令行里用这两种方法分别定义了数组a和数组b。

但我试图a==b,结果返回了True

然后我又a[0][0]=1,b[0][0]=1;再试图a==b,结果返回了False

当n==3:则a = [[1,0,0],[1,0,0],[1,0,0]],而b = [[1,0,0],[0,0,0],[0,0,0]]

于是,我发现了问题。事实上,使用第一种方法定义定义的二维数组,a[k](0<k<n)是对a[0]的复制,即指向的是同一个对象,对数字0的重复,其实是不同的对象,而对包含n个0的a[0]而言,它是一个对象,则a[k]不过是指针的复制,所以,修改其中任何一个数据,都会是对a[k]的修改。而第二种定义方法,则是产生了n*n个数据,a[k]!=a[k`]。所以,在使用第一种方法的时候要慎重!!!



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值