为什么将值错误地赋予数组?

时间:2020-01-19 16:46:04

标签: python jupyter-lab

我是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。

1 个答案:

答案 0 :(得分:0)

如果您分配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.])