我想做一个类实例的快速副本。 cPickle.loads(cPickle.dumps(),-1)
工作正常,几乎比copy.deepcopy
快5倍,但我read that ujson
is much faster than cPickle
。我无法让ujson使用自定义类,是否可以这样做?是否有可能ujson.dumps()Python类实例(更快的深度拷贝)
例如:
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'更快的部分原因;它不需要做太多的事情。 – chepner
我想,你必须开发自己的JSON protocole。将一个类实例转储到一个JSON对象中可能很容易(实际上是转储'__dict__')。但是,加载JSON对象并不容易:如何区分类实例的“dict”。这没有JSON语法。 –