피클에 문제가 있습니다. 까다로운 사용 사례가 있으며 절인 개체의 사본이 다시 제공되지 않습니다. 내가피클이 내 주장 중 하나를 잃어 버림
class OneArg(object):
def __init__(self, somearg, *args, **kwargs):
print "In OneArgs's init with args={} and kwargs={}".format(args, kwargs)
self._somearg = somearg
super(OneArg, self).__init__(*args, **kwargs)
class OneArgSubclass(OneArg, OrderedDict):
def __init__(self, *args, **kwargs):
print "In OneArgSubclass's init with args={} and kwargs={}".format(args, kwargs)
super(OneArgSubclass, self).__init__(*args, **kwargs)
def verbose_pickle_dumps (obj):
result = pickle.dumps(obj)
print result
return result
oas = OneArgSubclass("SOMEARG")
oas['spam'] = 'eggs'
oas_red = pickle.loads(verbose_pickle_dumps(oas))
print "oas_red.keys():", oas_red.keys()
로 시작하는 경우 여기에 출력 내가 얻을 수있다 :
In OneArgSubclass's init with args=('SOMEARG',) and kwargs={}
In OneArgs's init with args=() and kwargs={}
oas.keys(): ['spam']
c__main__
OneArgSubclass
p0
((lp1
(lp2
S'spam'
p3
aS'eggs'
p4
aatp5
Rp6
(dp7
S'_somearg'
p8
S'SOMEARG'
p9
sb.
In OneArgSubclass's init with args=([['spam', 'eggs']],) and kwargs={}
In OneArgs's init with args=() and kwargs={}
oas_red.keys(): []
내가는 '스팸'OAS 피클 때/'계란'키/값 쌍 거기에 있음을 알 수
하고, _somearg의 가치도 마찬가지입니다. 그러나 "OrderedDict"문자열은 나타나지 않습니다. 피클에서 오아시스를 다시로드하려고하면 'SOMEARG'문자열을 선택하지 않으므로 _somearg의 값으로 사전의 내용이 대신 끝납니다.
나는 보았고 oas에는 __getinitargs __()도 __getnewargs __()도 없습니다. OrderedDict 대신 일반 dict을 사용하면 코드가 작동합니다 (절편 된 표현은 'copy_reg'를 포함하여 상당히 다르게 보입니다). 따라서 피클과 OrderedDict 간의 호환성 문제 일 수 있습니다. 하지만 피클은 OrderedDict와 함께 작업 할 때 잘 작동합니다.