首页 > 编程语言 > 详细

在Python中创建M x N的数组

时间:2020-11-29 22:52:14      阅读:103      评论:0      收藏:0      [点我收藏+]

在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]]

在Python中创建M x N的数组

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!