python创建m行n列列表_在Python中创建M x N的数组

在Python中创建M x N的数组 一般有三种方法:

列表乘法dp = [[0] * n] * m

for 循环dp= [[0 for _ in range(n)] for _ in range(m )]

乘法+for循环dp = [[0] * n for _ in range(m )]

但是,在使用列表乘法创建的时候会出现问题:

dp = [[0]*2]*2

print(dp) # [[0, 0], [0, 0]]

print(id(dp[0])) #3142462401856

print(id(dp[1])) #3142462401856

dp[0][1] = 2

print(dp) # [[0, 2], [0, 2]]

这说明在二维列表乘法的时候外层只是用了引用,而不是新开辟空间建立数组. 从地址上也可以看出来,dp[0]和dp[1]实际上指向了同一个对象。因此,当尝试修改dp[0]中的元素的时候,dp[1]中的对应元素会同时修改。问题在于外层的乘法实际上已经是引用型。

同理,如果一维列表乘法的时候用的就是引用类型的数据,也会出现一样的情况

class A():

def __init__(self,a=0,b=1):

self.a = a

self.b = b

def change(self,c):

self.a = c

return 1

def __repr__(self):

return "A:[{},{}]".format(self.a,self.b)

if __name__ == "__main__":

test = A(2,3)

print(test) # A:[2,3]

testlist = [test]*3

print(testlist) # [A:[2,3], A:[2,3], A:[2,3]]

test.change(5)

print(test) # A:[5,3]

print(testlist) # [A:[5,3], A:[5,3], A:[5,3]]

原文:https://www.cnblogs.com/lyh-kop/p/14057369.html

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值