所以我有一个 boolean 列表列表,我将某个索引从 True 更改为 False,它也会影响列表列表中的其他一些元素。为什么会发生这种情况?还有其他选择吗?
test = [[True]*9]*9
test[0][1] = False
print(test)
输出:
[[True, False, True, True, True, True, True, True, True],
[True, False, True, True, True, True, True, True, True],
[True, False, True, True, True, True, True, True, True],
[True, False, True, True, True, True, True, True, True],
[True, False, True, True, True, True, True, True, True],
[True, False, True, True, True, True, True, True, True],
[True, False, True, True, True, True, True, True, True],
[True, False, True, True, True, True, True, True, True],
[True, False, True, True, True, True, True, True, True]]
最佳答案
你想做的是:
test = [[True for i in range(cols)] for j in range(rows)]
#OR
test = [[True]*cols for j in range(rows)]
做的问题
test = [[True]*9]*9
您正在创建一个多维列表
,该列表引用保存True
值的相同内存地址
。
这就像拥有:
test = [ [True, True, True, True, True, True, True, True, True] repeated 9 times ]
其中所有行都指向各自列的相同内存位置。因此,当您更改一列中的值时,整组列值都会发生更改。
因此,按照所需的方式,
test = [[True for i in range(9)] for j in range(9)]
test[0][1] = False
print(test)
将打印:
[[True, False, True, True, True, True, True, True, True],
[True, True, True, True, True, True, True, True, True],
[True, True, True, True, True, True, True, True, True],
[True, True, True, True, True, True, True, True, True],
[True, True, True, True, True, True, True, True, True],
[True, True, True, True, True, True, True, True, True],
[True, True, True, True, True, True, True, True, True],
[True, True, True, True, True, True, True, True, True],
[True, True, True, True, True, True, True, True, True]]
关于python - 更改列表的 boolean 列表的某个索引也会更改其他索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46848035/