Liste Python vs Array NumPy Un’analisi approfondita della disposizione in memoria e dei vantaggi delle prestazioni

Liste Python vs Array NumPy un'analisi della memoria e delle prestazioni

CALCOLO SCIENTIFICO

Esplorare le differenze di allocazione e i guadagni di efficienza

I dati negli array NumPy sono disposti in modo compatto come i libri su uno scaffale. Foto di Eliabe Costa su Unsplash

In questo articolo, approfondiremo le differenze di progettazione della memoria tra le liste native di Python e gli array NumPy, rivelando perché NumPy può offrire migliori prestazioni in molti casi.

Confronteremo le strutture dati, l’allocazione della memoria e i metodi di accesso, mettendo in mostra la potenza degli array NumPy.

Introduzione

Immagina di prepararti a andare in biblioteca per trovare un libro. Adesso, scopri che la biblioteca ha due scaffali:

Il primo scaffale è pieno di diverse scatole squisite, alcune contenenti CD, altre contenenti immagini e altre contenenti libri. Solo il nome dell’oggetto è attaccato alla scatola.

Questo rappresenta le liste native di Python, in cui ogni elemento ha il suo spazio di memoria e le informazioni sul tipo.

Tuttavia, questo approccio ha un problema: molti spazi vuoti nelle scatole, sprecando spazio sugli scaffali. Inoltre, quando vuoi trovare un libro specifico, devi guardare dentro ogni scatola, il che richiede tempo extra.

Ora guardiamo il secondo scaffale. Questa volta non ci sono scatole; libri, CD e immagini sono tutti collocati in modo compatto in base alle loro categorie.

Questo sono gli array NumPy, che memorizzano i dati in memoria in modo continuo, migliorando l’utilizzo dello spazio.

Dato che gli elementi sono tutti raggruppati per categoria, puoi trovare rapidamente un libro senza dover cercare in molte scatole. Questo è il motivo per cui gli array NumPy sono più veloci delle liste native di Python in molte operazioni.

Liste di Python: una soluzione flessibile ma meno efficiente

Tutto in Python è un oggetto

Iniziamo con l’interprete di Python: anche se CPython è scritto in C, le variabili di Python non sono tipi di dati di base in C, ma strutture C che contengono valori e informazioni aggiuntive.

Prendiamo come esempio un intero di Python x = 10_000, x non è un tipo di base nello stack. Invece, è un puntatore a un oggetto nella memoria heap.