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.