使用Numpy数组和列表进行多次赋值,这是一个奇怪的例子

Gio*_*ker 2 python numpy assignment-operator python-internals

考虑多重分配x[0],y = y,x[0].应用于以下四种情况中的每一种情况,这给出了四种不同的结果.

看起来列表的多重分配比Numpy阵列的多重分配更智能(自动通过临时变量).

思考?

编辑:事后并不聪明......

Eri*_*ric 5

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

x = np.array([[1,2], [3,4]])
y = np.array([5,6])  # or [5, 6]
Run Code Online (Sandbox Code Playgroud)

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

由于其他人只是围绕数据类型进行交换,但保持相同的值.

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

temp = x[0]
x[0] = y
y = temp
Run Code Online (Sandbox Code Playgroud)

因为temp视图始终是相同的x[0],而不是该x[0]时间点的值的副本.

为了使这个工作适用于numpy案例,你应该使用 x[0],y = y,x[0].copy()