Python中自定义实例反序列化:应该更新对象字典,还是替换它可以?
在定义某个类的对象如何被反序列化(也就是从存储中恢复)时,我们可以通过__setstate__来实现。我了解到,当被序列化的状态是一个字典时,这样做是安全的。
def __setstate__(self, dict_returned_by_pickle):
self.__dict__.update(dict_returned_by_pickle)
这是我在StackOverflow上的一个回答中看到的。
不过,这样做是出于安全考虑吗?也就是说,是否是为了防止在调用__setstate__
时,self.__dict__
里还有一些数据?还是说这样做只是比下面的方式更快、更简洁呢?
self.__dict__ = dict_returned_by_pickle
后者的方式会强制旧的self.__dict__
被垃圾回收。