[Python] Memory error

Manlio Perillo manlio.perillo a gmail.com
Mer 3 Nov 2010 17:43:54 CET


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Il 03/11/2010 17:29, Carlos Catucci ha scritto:
>> tutta una serie di cose... Se questa lista supera una certa dimensione,
> 
>     > circa 100 Mb, python esce con un memory error (dopo aver saturato
>     la RAM).
>     > E' possibile far qualcosa?
> 
>     Prova ad usare un array, invece che una lista.
> 
> 
> Perdonami ma dove sarebbe la differenza? Mi hanno insegnato (magari a
> torto) che in Python gli array sono detti Liste e le Hashtable o Array
> Scalar sono detti Dizionari.
>  

In Python abbiamo:
- - list: implementate usando un array C
        http://bytes.com/topic/python/answers/101848-list-implementation
- - dict: non credo sia una semplice hash table
- - array: implementati come array C, e che possono contenere solo tipi
         base (vedi documentazione)


La differenza tra list ed array e che le le liste contengono puntatori
ad oggetti Python (allocati sullo heap).
Invece gli array (modulo array oppure numpy) sono come gli array C.


Un'altra importante differenza tra lista ed array, è che quando aggiungi
elementi ad una lista, di tanto in tanto deve essere effettuato un
resize, che quindi occupa il doppio della memoria richiesta (per la
vecchia e la nuova lista).

Un array, invece, può essere pre allocato, se sai lo spazio che ti serve.

Unica "pecca" del modulo array è che non puoi inizializzare un array
specificando una dimensione ed il valore di default.


numpy offre un array molto più flessibile, e che può contenere qualsiasi
tipo Python.


Ciao  Manlio
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAkzRkUkACgkQscQJ24LbaURoHwCgmbknSyn3NJXzRw8laRfMfOo5
m6UAnigzXc26i9MWcE2O0KBGW0EIzNqG
=GhvS
-----END PGP SIGNATURE-----


Maggiori informazioni sulla lista Python