【发布时间】:2012-12-07 16:53:15
【问题描述】:
有没有办法保留腌制对象的身份,即有下面的打印True:
import pickle
class Foo:
pass
x = Foo()
print(x is pickle.loads(pickle.dumps(x))) #False
我在 Linux 机器上使用 cPickle 和 cpython 3.x,不需要可移植的东西。
【问题讨论】:
-
不,身份是特定实例的身份。
-
@Cameron,我需要这个,因为我有具有缓存属性的对象,缓存是我存储为对象属性的字典(对象本身作为字典的键)。这一切都很好。但是,当我腌制对象,将其发送到某处,然后取消腌制时,我现在有了一个新对象,其旧对象 ID 保存在缓存字典的键中。这个缓存的属性是一个通用工厂,我不想乱用
__eq____ne__方法。不确定__getstate__、__setstate__方法是否可行? -
我认为是比较对象的内存位置......所以它可能永远不会导致真实......
-
当你将对象发送到某个地方时,你是否也发送了缓存?
-
是的,确切地说,我也发送了缓存 - 尝试使用密钥的 id 进行返工,因为听起来不可能保留身份。
标签: python python-3.x identity pickle