追加到数组的问题

时间:2019-06-02 18:35:04

标签: python-3.x

我不明白为什么下面描述的代码会做什么

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]]。为什么我没有得到我期望的表格?

1 个答案:

答案 0 :(得分:3)

AB指向内存中的对象。因此,如果在内存中修改了对象本身,则指向该对象的所有变量将显示更新后的值。

现在让我们看一下代码:

B.append(i)->列表B附加i值。

A.append(B)->列表A附加了B的引用。但是B所引用的对象本身在每次迭代中都会被修改,因此{{ 1}}显示为每个迭代级别上B的每个元素。如果您运行循环以进行更多迭代并打印A,则会清楚地注意到此行为。

解决此问题的一种方法是在A的后面附加A的副本。

B