作者Conjuror (阿纠)
看板Python
标题Re: [问题] List of List初始化
时间Tue Nov 22 14:47:42 2016
直接回一篇好了,不确定我的观念是不是正确的,欢迎指教
当你建立 [True, True, Ture] 的时候,实际上是在记忆体建立一个 list
而重覆 [] *3 的时候,实际上虽然阵列变成 [[], [], []] 的样子,
但是不管哪一个子 list 都是指向同样的记忆体空间。
如果要建立不同的空间,就需要重新宣告,或是用 deepcopy 去复制
[[[True, True, True] for i in range(3)] for x in range(5)]
※ 引述《fishlinghu (令狐瑜)》之铭言:
: 刚刚打了一段程式码如下
: 想要initialize一个3D的list
: temp = [[[True, True, True]]*3]*5
: 结果发现
: 改里面任一个element
: 其他对应位置的element也会一起改
: 例如我用temp[0][0][2] = False
: 则temp[m][n][2]会全部变成False
: 想请问为何会这样呢?
: 希望各位高手可以从观念来解释
: 那正确的initialization方式应该是怎样呢?
: 非常感谢各位的帮忙与解答
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.163.10.190
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1479797264.A.C72.html
1F:推 gozule: 此篇正解,我也犯过这个错误,找了半天才发现 11/22 18:24
2F:推 fishlinghu: 了解了 感谢你^^ 11/22 23:37
3F:推 Yshuan: 可以趁机看一下 mutable object的一些副作用 11/23 11:11