Корневые несогласованные значения SciPy между вызовами функций

Используя 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 и/или SciPy, или это ошибка?

[править] Я сократил вопрос до сути.


person Sinus    schedule 08.11.2020    source источник


Ответы (1)


при назначении списков значения не копируются, а просто присваивается другое имя, поэтому изменения в списке через одно имя отражаются в другом. Чтобы получить ожидаемое поведение, измените соответствующую строку на

    prev_x=x.copy()

(обратите внимание на бит copy())

person piterbarg    schedule 10.11.2020