为什么 Numpy 数组的变化没有反映在两种不同的情况下?

Why changes in Numpy array are not reflecting in two different cases?

我对以下两个代码感到困惑:

第一个代码:更改反映在两个数组中

    import numpy as nm

    ab=nm.arange(10)
    ba=ab
    ba[0]=99
    print(ba)
    print (ab)

输出:

ba=[99  1  2  3  4  5  6  7  8  9]

ab=[99  1  2  3  4  5  6  7  8  9]

第二个代码:更改未反映在两个数组中

    import numpy as nm

    ab=nm.arange(10)
    ba=ab
    ba=ab-ab
    print(ba)
    print(ab)

输出:

ba=[0 0 0 0 0 0 0 0 0 0]

ab=[0 1 2 3 4 5 6 7 8 9]

有人可以解释一下吗?我想了解为什么会这样?我可以看到在第二种情况下分配了新地址,但为什么不像第一种情况那样覆盖数据?

保存数组的变量实际上保存了数组所在的内存地址,通过ba=ab你为两个数组设置了相同的地址,所以如果你改变其中一个,改变将会反映在另一个中,但是通过执行 ba=ab-ab,您将用 评估 的结果覆盖此地址,并且由于它是新数据,因此必须存储在新内存地址。