SciPy根函数调用之间的值不一致

SciPy root inconsistent values between function calls

使用 opt.root,我想存储调用函数的参数。

import scipy.optimize as opt

x0=[0, 0]
prev_x=x0
count=0
def fun(x):
    global prev_x,count
    print('---')
    print('iteration',count)
    count+=1
    print('last iteration',prev_x)
    print('this iteration',x)
    prev_x=x
    return x[0]**2*x[1]+1,x[1]-x[0]+2

result=opt.root(fun,x0,method='lm')

我希望对于每个迭代步骤,last_x 中保存的值应该与上一次迭代的当前值相匹配。 运行 上面的代码,我得到了不同的值,例如迭代 8 和 9.

我是否遗漏了一些关于 Python and/or SciPy 的基本行为,或者这是一个错误?

[edit] 我将问题缩短到要点。

分配列表不会复制值,只是给它一个不同的名称,因此通过一个名称对列表的更改会反映在另一个名称中。要获得您期望的行为,请将相关行更改为

    prev_x=x.copy()

(注意 copy() 位)