我对python变量persistence有点困惑,在我的代码中,我使用以下代码使模型参数在某些迭代过程中持久化
with open('W_Hs_Hu_iter'+str(inx)+'.pickle', 'wb') as f:
pickle.dump((self.W,self.Hs,self.Hu),f)
在长时间的迭代之后,我尝试用
with open('W_Hs_Hu_iter450.pickle', 'rb') as f:
W,Hs,Hu= pickle.load(f)
#W,Hu,Hs= pickle.load(f)
但我查过之后,Hs和Hu的顺序错了吗?那会发生吗?你知道吗
我同意@peterwood的说法,它看起来是正确的,而且我已经测试过了。你知道吗
我最好的猜测是,保存时,
Hs
和Hu
的值已经交换了。保存前进行日志\打印。你知道吗下面是一个类实例的pickle,其中属性值在pickle之后交换。你知道吗
所以,这和预期的一样。但是,python通过引用来pickle类,因此如果更改类定义,它似乎会更改实例属性。你知道吗
如果将列表或其他序列作为类属性,则这一点更为明显。所以,让我们向类中添加一些列表对象。你知道吗
这是因为列表的值实际上存储在class属性而不是instance属性上。这是这种行为的许多例子之一。你知道吗
如果您想保持实例“原样”(即不通过引用存储),那么应该使用
dill
进行pickle。然而,来自dill
的泡菜会更大。你知道吗相关问题 更多 >
编程相关推荐