Gio*_*ker 2 python numpy assignment-operator python-internals
考虑多重分配x[0],y = y,x[0]
.应用于以下四种情况中的每一种情况,这给出了四种不同的结果.
情况1:
x = [[1,2], [3,4]]
y = [5,6]
Run Code Online (Sandbox Code Playgroud)
给
x = [[5,6], [3,4]]
y = [1,2]
Run Code Online (Sandbox Code Playgroud)案例2:
x = np.array([[1,2], [3,4]])
y = [5,6]
Run Code Online (Sandbox Code Playgroud)
给
x = array([[5,6], [3,4]])
y = array([5,6])
Run Code Online (Sandbox Code Playgroud)案例3:
x = [[1,2], [3,4]]
y = np.array([5,6])
Run Code Online (Sandbox Code Playgroud)
给
x = [array([5,6]), [3,4]]
y = [1,2]
Run Code Online (Sandbox Code Playgroud)案例4:
x = np.array([[1,2], [3,4]])
y = np.array([5,6])
Run Code Online (Sandbox Code Playgroud)
给
x = array([[5,6], [3,4]])
y = array([5,6])
Run Code Online (Sandbox Code Playgroud)看起来列表的多重分配比Numpy阵列的多重分配更智能(自动通过临时变量).
思考?
编辑:事后并不聪明......
这里唯一令人惊讶的案例应该是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()
归档时间: |
|
查看次数: |
505 次 |
最近记录: |