Il modulo pickle ha un cugino ottimizzato chiamato modulo cPickle. Come implicitamente dice il suo nome, cPickle � scritto in C, cos� da poter essere sino a 1000 volte pi� veloce di pickle. Comunque sia non � in grado di derivare sotto classi dalle classi Pickler() e Unpickler(), perch� in cPickle queste sono funzioni, non classi. La maggior parte delle applicazioni non necessitano di questa funzionalit�, e possono beneficiare delle migliori prestazioni di cPickle. Oltre a questo, le interfacce dei due moduli sono pressoch� identiche; l'interfaccia comune viene descritta in questo manuale e le differenze vengono messe in rilievo dove necessario. Nelle discussioni seguenti, si user� il termine ``pickle'' per descrivere globalmente sia il modulo pickle che cPickle.
I flussi di dati prodotti dai due moduli vengono garantiti per essere interscambiabili.
Python ha un modulo di serializzazione pi� primitivo chiamato marshal, ma in generale pickle dovrebbe essere sempre il modo preferenziale per serializzare oggetti Python. marshal esiste principalmente per supportare i file Python .pyc.
Il modulo pickle differisce da marshal per diverse significative caratteristiche:
Ci� ha implicazioni sia per gli oggetti ricorsivi che per la condivisione degli oggetti. Gli oggetti ricorsivi sono oggetti contenenti riferimenti a s� stessi. Non vengono gestiti da marshal, e infatti, l'utilizzo di marshal su oggetti ricorsivi provocher� il crash dell'interprete Python. La condivisione di oggetti si presenta quando vi sono molteplici riferimenti allo stesso oggetto, in posti differenti nella gerarchia dell'oggetto che � stato serializzato. pickle memorizza questi oggetti una volta sola, e assicura che tutti gli altri riferimenti puntino all'originale. Gli oggetti condivisi rimangono condivisi, caratteristica questa molto importante nel caso di oggetti mutevoli.
Notate che la serializzazione � un concetto pi� primitivo di quello della persistenza; sebbene pickle scriva e legga file oggetto, non gestisce il problema del nominare oggetti persistenti, cos� come il caso (ancora pi� complicato) degli accessi simultanei ad oggetti persistenti. Il modulo pickle pu� trasformare un oggetto complesso in un flusso di byte, e pu� trasformare il flusso di byte in un oggetto con la stessa struttura interna. Forse la cosa pi� ovvia da fare con questi flussi di byte � quella di scriverli su di un file, ma � altres� concepibile inviarli attraverso una rete o salvarli in un database. Il modulo shelve fornisce una semplice interfaccia ad oggetti serializzati o deserializzati su file database in stile DBM.
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.