我不明白为什么下面描述的代码会做什么
import numpy as np
N = 2
A=[];
B=[];
for i in range(N):
B.append(i)
A.append(B)
第一次for循环运行(对于i = 0),A = [[0]]。循环第二次运行(对于i = 1),B = [0,1],因此我期望A = [[0],[0,1]],因为我们将B附加到A。但是,当我打印A,我得到A = [[0,1],[0,1]]。为什么我没有得到我期望的表格?
答案 0 :(得分:3)
A
和B
指向内存中的对象。因此,如果在内存中修改了对象本身,则指向该对象的所有变量将显示更新后的值。
现在让我们看一下代码:
B.append(i)
->列表B
附加i值。
A.append(B)
->列表A
附加了B的引用。但是B
所引用的对象本身在每次迭代中都会被修改,因此{{ 1}}显示为每个迭代级别上B
的每个元素。如果您运行循环以进行更多迭代并打印A
,则会清楚地注意到此行为。
解决此问题的一种方法是在A
的后面附加A
的副本。
B