我读到 pyhton 会回收 ID,这意味着新对象最终可能会使用先前存在并被销毁的对象的 ID。我还读到了关于pickle:
pickle 模块会跟踪已经序列化的对象,以便以后对同一对象的引用不会再次序列化。元帅不会这样做。
如果我将
Pickler
的实例打开几分钟,并在信息传入时写入单个文件,并在调用 Pickler.dump(obj)
后立即丢弃它,是否存在新的 obj
被赋予 id 的风险另一个已被写入同一文件中的文件,因此意外地写入了错误的内容?
不存在发生这种情况的风险,因为备忘录
dict
包含有问题的对象;直到酸洗完成并且备忘录字典被清理干净,它的生命周期才会结束。
具体来说,在当前的实现中,记忆字典将对象的
id
映射到双tuple
,其中第一个元素是第二次写入记忆值时要使用的索引,第二个元素是是价值本身。根据函数内的注释,这是设计的有意部分,其中指出:
该对象存储在 Pickler 备忘录中,以便瞬态对象在 pickle 过程中保持活动状态。