Python中自定义实例反序列化:应该更新对象字典,还是替换它可以?

2 投票
1 回答
824 浏览
提问于 2025-04-15 19:01

在定义某个类的对象如何被反序列化(也就是从存储中恢复)时,我们可以通过__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__被垃圾回收。

1 个回答

0

替换它是没问题的。这就是borg模式的作用。

如果没有其他地方再引用原来的字典,它就会被垃圾回收机制清理掉。

撰写回答