Python Numpy数组别名行为不一致
以下行为是预期的,也是我得到的。这与本机Python对象(如列表)的别名工作方式一致Python Numpy数组别名行为不一致,python,numpy,Python,Numpy,以下行为是预期的,也是我得到的。这与本机Python对象(如列表)的别名工作方式一致 >>> x = np.array([1, 2, 3]) >>> y = x >>> x array([1, 2, 3]) >>> y array([1, 2, 3]) >>> x = x + np.array([2, 3, 4]) >>> x array([3, 5, 7]) >>> y
>>> x = np.array([1, 2, 3])
>>> y = x
>>> x
array([1, 2, 3])
>>> y
array([1, 2, 3])
>>> x = x + np.array([2, 3, 4])
>>> x
array([3, 5, 7])
>>> y
array([1, 2, 3])
但是将x=x+np.array([2,3,4])
更改为x+=np.array([2,3,4])
在我的机器上,Numpy版本是1.16.4。这是一个bug还是一个特性?如果这是一个特性,那么
x=x+np.array([2,3,4])
与x+=np.array([2,3,4])有何不同
您的行y=x
不会创建数组的副本;它只是告诉y
指向与x
相同的数据,如果查看它们的id
s,您可以看到:
x = np.array([1,2,3])
y = x
print(id(x), id(y))
(140644627505280, 140644627505280)
x=x+np.array([2,3,4])
将把x重新分配给新的id
,而x+=np.array([2,3,4])
将对其进行适当修改。因此,+=
也会修改y,而x=x+…
不会修改
x += np.array([2, 3, 4])
print(id(x))
print(x, y)
x = x + np.array([2, 3, 4])
print(id(x))
print(x, y)
140644627505280
[3 5 7] [3 5 7]
140644627175744
[ 5 8 11] [3 5 7]
这方面的主要收获是:每当你对“别名”感到困惑时(正如OP所说的那样),可以大量使用
print(id(x))
来查看发生了什么,这通常会把事情弄清楚。
x += np.array([2, 3, 4])
print(id(x))
print(x, y)
x = x + np.array([2, 3, 4])
print(id(x))
print(x, y)
140644627505280
[3 5 7] [3 5 7]
140644627175744
[ 5 8 11] [3 5 7]