Re: [问题] List of List初始化

楼主: Conjuror (阿纠)   2016-11-22 14:47:42
直接回一篇好了,不确定我的观念是不是正确的,欢迎指教
当你建立 [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方式应该是怎样呢?
: 非常感谢各位的帮忙与解答
作者: gozule (好冷啊~~)   2016-11-22 18:24:00
此篇正解,我也犯过这个错误,找了半天才发现
作者: fishlinghu (令狐瑜)   2016-11-22 23:37:00
了解了 感谢你^^
作者: Yshuan (倚絃)   2016-11-23 11:11:00
可以趁机看一下 mutable object的一些副作用

Links booklink

Contact Us: admin [ a t ] ucptt.com