python - 更改列表的 boolean 列表的某个索引也会更改其他索引

标签 python python-3.x list boolean

所以我有一个 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/

相关文章:

jquery - 具有验证和多表单处理的 Django Ajax 提交

python - 从模块名称获取路径

python - Snakemake - 从输入文件动态派生目标

python-3.x - 如何解决 "logits and labels must have the same first dimension"错误

python - 将用户输入附加到循环中的列表

python - groupby+sum/mean/ect 然后让分组值返回到原始数据框中的原始未分组索引?

python - tkinter 中的 GIF 故障

python - 最多 'o' 个字符的单词

c# - 移动列表中的元素

java - ArrayList 改变所有对象的一个​​属性值