这个问题已经在这里有了答案:????????????>????????????Having trouble making a list of lists of a designated size????????????????????????????????????1个
关于这个问题:
在处理二维数组时,我发现以某种方式对其进行初始化会产生意想不到的结果.我想了解通过以下两种方式初始化8×8网格之间的区别:
>>> a = [[1]*8]*8
>>> a
[[1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1], \n [1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1], \n [1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1], \n [1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1]]
与
>>> A = [[1 for i in range(8)] for j in range(8)]
>>> A
[[1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1], \n [1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1], \n [1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1], \n [1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1]]
出乎意料的结果是,用索引[0-6] [x]访问的任何元素都将指向[7] [x]中的最后一行.数组在解释器中看起来相同,因此很困惑.第一种方法有什么问题?
如果相关,这些数组将包含对GTK EventBox的引用,这些GTBox EventBox代表棋盘的正方形.将初始化方法更改为列表理解方法后,正方形会正确响应预期的悬停和单击事件.