Numpy 数组和列表的多重赋值,一个奇怪的例子

Multiple assignment with Numpy arrays and lists, a curious example

考虑多重赋值 x[0],y = y,x[0]。应用于以下四种情况中的每一种,都会给出四种不同的结果。

列表的多重赋值似乎比 Numpy 数组的多重赋值更聪明(自动通过临时变量)。

想法?

编辑:毕竟不是更聪明...

x[0],y = y,x[0]

等于

t = x[0]
x[0] = y
y = t

正如@Scimonster 指出的那样,

When assigning into a Numpy array, it turns that into part of the Numpy array.

所以这是正常行为。

这里唯一令人惊讶的情况应该是 2 和 4:

x = np.array([[1,2], [3,4]])
y = np.array([5,6])  # or [5, 6]

给予

x = array([[5,6], [3,4]])
y = array([5,6])  # where did the 1 and 2 go?

因为其他人只是交换数据类型,但保持相同的值。

使用 numpy 的不同之处在于 x[0] returns 视图,而不是副本。因此,即使在元组赋值中写出临时值也会显式失败:

temp = x[0]
x[0] = y
y = temp

因为 temp 是一个始终与 x[0] 相同的视图,而不是 x[0] 在那个时间点的值的副本。

为了使这个适用于 numpy 的情况,你应该使用 x[0],y = y,x[0].copy()