python 二维列表(数组)赋值问题

1,703 阅读1分钟
当我们使用arr = [[0]*5]*5 初始化一个二维数组时,会得到一个5*5的数组,


  • In [1]: arr = [[0]*5]*5



  • In [2]: arr



  • Out[2]:



  • [[0, 0, 0, 0, 0],



  • [0, 0, 0, 0, 0],



  • [0, 0, 0, 0, 0],



  • [0, 0, 0, 0, 0],



  • [0, 0, 0, 0, 0]]



然后对这个二维数组某个元素进行赋值,会发现整列都会被赋值,


  • In [3]: arr[0][0] = 1



  • In [4]: arr



  • Out[4]:



  • [[1, 0, 0, 0, 0],



  • [1, 0, 0, 0, 0],



  • [1, 0, 0, 0, 0],



  • [1, 0, 0, 0, 0],



  • [1, 0, 0, 0, 0]]



这是因为 [[0]*5]*5 表示的是指向 [0]*5 这个列表的引用,所以当你修改某一个值时,整个列表都会被改变。
换一种初始化方式可以解决这个问题,


  • In [1]: arr = [[0]*5 for _ in range(5)]



  • In [2]: arr



  • Out[2]:



  • [[0, 0, 0, 0, 0],



  • [0, 0, 0, 0, 0],



  • [0, 0, 0, 0, 0],



  • [0, 0, 0, 0, 0],



  • [0, 0, 0, 0, 0]]







  • In [3]: arr[0][0] = 1



  • In [4]: arr



  • Out[4]:



  • [[1, 0, 0, 0, 0],



  • [0, 0, 0, 0, 0],



  • [0, 0, 0, 0, 0],



  • [0, 0, 0, 0, 0],



  • [0, 0, 0, 0, 0]]




---------------------作者:zzc15806 来源:CSDN 原文:blog.csdn.net/zzc15806/a … 版权声明:本文为博主原创文章,转载请附上博文链接!

更多免费技术资料可关注:annalin1203