为什么 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
,您将用 评估 的结果覆盖此地址,并且由于它是新数据,因此必须存储在新内存地址。
我对以下两个代码感到困惑:
第一个代码:更改反映在两个数组中
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
,您将用 评估 的结果覆盖此地址,并且由于它是新数据,因此必须存储在新内存地址。