问题描述
最近在我学习Python时,我想到了这个问题。我创建了两个不同的空列表,一个使用列表推导,另一个使用“乘法”。
结构上,两个列表相似。
然后,当我分配array [0] [0] = 1的值并尝试打印列表时,结果如下所示。
(397,602)
(198,301,2)
我的问题是为什么在数组b上,每个列表开头的所有值都替换为1,而不是在数组a中。我需要一个灵巧的答案。
解决方法
当您执行b=[[0]*3]*3
时,它会创建一个大小为3的一维列表,并用零填充,然后将其复制3次。那就是这三个[0,0],[0,0]都指向相同的存储位置。因此,当您更新一个a[0][0] = 1
时,它会反映在所有三个中。
相反,当您对a([range(3)中的i为0(0),range(3))中的j为a]]创建一个唯一的内存位置,因此您的更新仅反映在一个单元格中。
也正如上面的评论所指出的,这是一个重复的问题。