我想做一個類實例的快速副本。 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語法。 –