클래스 인스턴스의 빠른 복사본을 만들려고합니다. cPickle.loads(cPickle.dumps(),-1)
은 copy.deepcopy
보다 거의 5 배 빠르지 만 I read that ujson
is much faster than cPickle
과 비슷합니다. 나는 ujson이 맞춤 클래스로 작업하도록 할 수 없었습니다. 그렇게 할 수 있습니까?ujson.dumps() 파이썬 클래스 인스턴스 (빠른 딥 카피) 가능합니다
예 :
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 구문이 없습니다. –