私はクラスインスタンスの高速コピーを作成しようとしています。 cPickle.loads(cPickle.dumps(),-1)
は、copy.deepcopy
よりもほぼ5倍速いですが、I 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プロトコールを開発しなければならないと思います。クラスインスタンスをJSONオブジェクトにダンプすることは簡単です(実際は '__dict__'をダンプします)。しかし、JSONオブジェクトをロードするのは簡単ではありません。クラス・インスタンスから 'dict'をどうやって区別しますか?そのためのJSON構文はありません。 –