J'essaie de faire une copie rapide d'une instance de classe. cPickle.loads(cPickle.dumps(),-1)
fonctionne très bien, presque 5 fois plus vite que copy.deepcopy
, mais je read that ujson
is much faster than cPickle
. Je ne pouvais pas faire travailler ujson avec un cours personnalisé, est-ce possible?est-il possible d'ujson.dumps() instance de classe python (deepcopy plus rapide)
exemple:
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>
Non. Vous pouvez voir en regardant la sortie de 'ujson.dumps' (c'est juste un objet 'str') qu'il ne contient pas les informations nécessaires pour reconstruire l'objet source. C'est * juste * un encodeur JSON. Cela fait partie de la raison pour laquelle il est plus rapide que cPickle; ça n'a pas à faire autant. – chepner
Je pense que vous devez développer votre propre protocole JSON. Il peut être facile de vider une instance de classe dans un objet JSON (en fait vous jetez le '__dict__'). Mais, il n'est pas facile de charger un objet JSON: comment différencier un 'dict' d'une instance de classe. Il n'y a pas de syntaxe JSON pour cela. –