回收Python对象ID对于Pickler来说会是一个问题吗?

问题描述 投票:0回答:1

我读到 pyhton 会回收 ID,这意味着新对象最终可能会使用先前存在并被销毁的对象的 ID。我还读到了关于pickle

pickle 模块会跟踪已经序列化的对象,以便以后对同一对象的引用不会再次序列化。元帅不会这样做。

如果我将

Pickler
的实例打开几分钟,并在信息传入时写入单个文件,并在调用
Pickler.dump(obj)
后立即丢弃它,是否存在新的
obj
被赋予 id 的风险另一个已被写入同一文件中的文件,因此意外地写入了错误的内容?

python python-3.x pickle memoization
1个回答
1
投票

不存在发生这种情况的风险,因为备忘录

dict
包含有问题的对象;直到酸洗完成并且备忘录字典被清理干净,它的生命周期才会结束。

具体来说,在当前的实现中,记忆字典将对象的

id
映射到双
tuple
,其中第一个元素是第二次写入记忆值时要使用的索引,第二个元素是是价值本身。根据函数内的注释,这是设计的有意部分,其中指出:

该对象存储在 Pickler 备忘录中,以便瞬态对象在 pickle 过程中保持活动状态。

© www.soinside.com 2019 - 2024. All rights reserved.