3.14.1 Relazioni con altri moduli Python

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:

Il modulo pickle non viene considerato sicuro contro dati costruiti erroneamente o in modo malizioso. Evitate di deserializzare dati ricevuti da fonte inattendibile o sconosciuta.

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.