作者fishlinghu (令狐瑜)
看板Python
标题[问题] List of List初始化
时间Tue Nov 22 14:18:30 2016
刚刚打了一段程式码如下
想要initialize一个3D的list
temp = [[[True, True, True]]*3]*5
结果发现
改里面任一个element
其他对应位置的element也会一起改
例如我用temp[0][0][2] = False
则temp[m][n][2]会全部变成False
想请问为何会这样呢?
希望各位高手可以从观念来解释
那正确的initialization方式应该是怎样呢?
非常感谢各位的帮忙与解答
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 128.61.97.157
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1479795513.A.3C4.html
1F:推 Conjuror: 因为事实上你的 3D 阵列都指向同一个记忆体位置 11/22 14:35
2F:→ Conjuror: temp[m][n][x] 的 x 不管是多少都是指同一个位置 11/22 14:35
3F:→ Conjuror: temp[m][n][0].__sizeof__ 11/22 14:41
4F:→ Conjuror: 所以建置的时候需要独立建立,我会这麽写 11/22 14:43