【发布时间】:2018-02-17 18:56:03
【问题描述】:
我正在尝试快速复制一个类实例。 cPickle.loads(cPickle.dumps(),-1) 工作正常,几乎比 copy.deepcopy 快 5 倍,但我 read that ujson is much faster than cPickle。我无法让 ujson 与自定义类一起使用,是否可以这样做?
示例:
import cPickle as pickle
import ujson
class AClass(object):
def __init__(self):
print('init')
self.v = 10
self.z = [2,3,4]
self._zdict = dict(zip(self.z,self.z))
a = AClass()
a
#<__main__.AClass at 0x118b1d390>
# does not work with ujson
ua = ujson.dumps(a)
au = ujson.loads(ua)
au
#{u'v': 10, u'z': [2, 3, 4]}
# but works with pickle
pa = pickle.dumps(a)
ap = pickle.loads(pa)
ap
#<__main__.AClass at 0x117460190>
【问题讨论】:
-
没有。您可以通过查看
ujson.dumps(它只是一个str对象)的输出来判断它不包含重建源对象所需的信息。它只是一个 JSON 编码器。这就是它比cPickle更快的部分原因;它不必做那么多。 -
我认为,您必须开发自己的 JSON 协议。将类实例转储到 JSON 对象中很容易(实际上您转储了
__dict__)。但是,加载 JSON 对象并不容易:如何区分dict和类实例。没有 JSON 语法。
标签: python pickle deep-copy jsonpickle ujson