赋值运算符是否覆盖Python函数中的参数引用?

时间:2017-12-11 21:30:40

标签: python pass-by-reference

目标是通过函数调用更新列表,该调用带有两个参数,一个是要修改的列表。 在以下示例中,j是要由函数f()修改的列表:

import numpy as np

j = np.log(np.array([[0.3],[0.4]]))
k = np.log(np.array([[0.1],[0.3]]))

def f(a,b):
    a = np.exp(a) - np.exp(b)

f(j,k)

print(j)

预期的解决方案是:

[[ 0.2]
 [ 0.1]]

然而,它产生:

[[-1.2039728 ]
 [-0.91629073]]

这是j的原始值。也就是说,j从未被修改过。

但如果使用+=代替-a技巧,

def f(a,b):
    a += -a + np.exp(a) - np.exp(b)

然后输出是预期的解决方案。

因此,问题是:赋值运算符是否覆盖Python函数中的参数引用? 如果使用j=+=的行为会发生变化,是否有解释?

0 个答案:

没有答案