Supponiamo che io sono un semplice definizione di classe Python in un file myClass.pyPickle con classi personalizzate
class Test:
A = []
e ho anche due script di test. Il primo script crea un oggetto di tipo Test, popola l'array A e mette il risultato in un file. Lo deseleziona immediatamente dal file e l'array è ancora popolato. Il secondo script designa solo il file e l'array non è popolato (ad esempio A == []). Perchè è questo?
test1.py
import myClass
import pickle
x = myClass.Test()
for i in xrange(5):
x.A.append(i)
f = open('data', 'w')
pickle.dump(x,f)
f.close()
f = open('data')
y = pickle.load(f)
f.close
print y.A
e test2.py
import myClass
import pickle
f = open('data')
y = pickle.load(f)
f.close
print y.A
Questo significa che se si fosse in salamoia la classe stessa, 'pickle.dump (Test)', e quindi deserializzato la classe, si avrebbe ottenuto l'elenco corretto 'A' indietro in entrambi i casi? – BallpointBen
@BallpointBen, no non conserverebbe l'attributo class, come per [what-can-be-pickled-and-unpickled] (https://docs.python.org/3/library/pickle.html#what- can-be-pickled-and-unpickled): "le classi vengono decapate in base al riferimento nominato, quindi si applicano le stesse restrizioni nell'ambiente di disimpegno. Nota che nessuno dei codici o dei dati della classe viene messo in salamoia" – jdi