我正在制作一个简单的机器学习程序,所以我可以更多地了解AI,但遇到了问题。我的程序有一个2D列表(101个列表,包含3个布尔值(共303个))。它执行几个循环,并且必须在每个循环中将一个子列表中的1或2个值设置为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]]
为什么它改变了每个列表的2 nd 值,而不仅仅是2 < nd 的值< sup> nd one?
答案 0 :(得分:1)
这里发生的是,当您创建列表时,您将反复乘以相同的引用。所以:
choices = [[False] * 3] * 101
实现目标的更好方法是:
choices = [[False for _ in range(3)] for _ in range(101)]
choices[1][1] = True