当我输入t=[[False]*2]*2
时,我会获得列表[[False, False], [False, False]]
。但是,当我输入t[0][0] = True
时,t[1][0]
也会更改为True
,留给我[[True, False], [True, False]]
。我只想要[[True, False], [False, False]]
。作为第二种选择,我可以指定t=[[False]*2, [False]*2]
,然后更改t[0][0] = True
获取我想要的内容([[True, False], [False, False]]
),但我的真实列表比那要大很多,所以我宁愿不要使用选项2.我认为这是克隆与使用列表复制的类似问题,所以我试过:
([[False]*2])*2
([False]*2)*2
[[False]*2][:]*2
t = [False]*2
t = t*2
list([False]*2)*2
list([[False]*2])*2
[list([False]*2)]*2
。这些都没有奏效。有没有办法在不导入任何包的情况下这样做?
答案 0 :(得分:0)
如果使用列表推导构建列表,则每个列表对象将指向唯一的地址,而不是共享相同的引用。
t = [[False for x in range(2)] for y in range(2)]
t[0][0] = True
t # [[True, False], [False, False]]