为什么一个值被错误地赋给了一个数组?

Why a value is wrongly given to an array?

我是 python 和编程的新手。可悲的是,我很快就在处理一项简单的任务时遇到了问题,而且找不到答案。在下面,我做了一个简短的例子:

a0=np.ones(10);
a1=a0;
a2=a0;
sum1=3;
sum2=2;
a1[0]=sum1;
a2[0]=sum2;
print(a1)

但是,数组 a1 的第一个元素是 2 而不是 3。有人愿意向我解释为什么并另外告诉我实现它的正确方法吗?在实际任务中,我会运行循环不同的时间段。在每个循环中,我生成不同的值,例如均值、中值和总和。 (如短示例中的 sum1 和 sum2)这些值被赋予已定义长度的数组(如 a1 和 a2)。 对了,我用JupyterLab来运行 python 3.

如果赋值a1=a0,则表示数组a1引用a0的对象。换句话说,您将 a0 绑定到与 a1 相同的值。

您将看到指向同一个列表的所有变量的变化。

为避免这种情况,您应该复制数组 a0,这样它们就不会相互引用:

a0=np.ones(10)
a1=a0.copy()
a2=a0.copy()
sum1=3
sum2=2
a1[0]=sum1
a2[0]=sum2
print(a0)
print(a1)
print(a2)

输出为:

a0 : array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
a1 : array([3., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
a2 : array([2., 1., 1., 1., 1., 1., 1., 1., 1., 1.])