我正在尝试制作一个简单的机器学习程序,以便我可以更多地了解人工智能,但遇到了问题。我的程序有一个 2D 列表(101 个包含 3 个 bool 值的列表(总共 303 个))。它执行多个循环,并且必须在每个循环中将子列表之一中的 1 或 2 个值设置为 True。运行我的程序时,所有值都太快地变为 true。起初,我认为这可能是由于random()
运气不好造成的。 ,但后来我看到所有的值在仅 90 到 100 次循环后就发生了变化,这应该是不可能的。
我决定在 shell 中进行实验。
>>> Choises=[[False]*3]*101
>>> Choises[1][1]=True
>>> Choises
[[False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False]]
到底为什么它改变了每个列表的第二个nd值,而不是仅仅改变了2<的第二个nd值支持>还有一个?
最佳答案
这里发生的情况是,当您创建列表时,您会一遍又一遍地乘以相同的引用。所以:
choices = [[False] * 3] * 101
实现您想要的效果的更好方法是:
choices = [[False for _ in range(3)] for _ in range(101)]
choices[1][1] = True
关于python - 分配给二维列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50475502/