A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

当我们使用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 原文:https://blog.csdn.net/zzc15806/a ... 406?utm_source=copy 版权声明:本文为博主原创文章,转载请附上博文链接!

2 个回复

倒序浏览
奈斯
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马