为什么函数scipy.optimize.minimize中的args ID会发生变化?

时间:2018-07-13 21:51:19

标签: python tuples immutability minimize id

关于函数scipy.optimize.minimize中args的ID,我有一个问题。

我以Nelder Mead方法为例进行了这样的测试(其他方法已经过测试并且问题相同):

print id(Args);

from scipy import optimize;
res = optimize.minimize(fun, x0, args=Args, method='Nelder-Mead', options={'initial_simplex':sim});
print 'res = ', res;

在fun.py中,我有:

def fun(x,* Args):

print id(Args)

return np.random.rand(1)[0]

我发现,在第一轮迭代中,Args的ID与其余各轮迭代不同。似乎该函数复制了args,但实际情况并非如此,因为args是不可变的元组。直接的结果是,如果我运行此优化的许多线程,内存中将有副本。

有人知道为什么会这样吗?有没有办法解决这个问题,并使用所有计算线程共享的相同Args,因此不会浪费内存用于此Args的副本?

谢谢, 卢克

0 个答案:

没有答案