Ho bisogno di una lista molto ampia, e sto cercando di capire quanto posso fare in modo che si adatti ancora a 1-2 GB di RAM. Sto usando l'implementazione CPython, su 64 bit (x86_64).Python: quanto spazio occupa ciascun elemento di una lista?
Modifica: grazie alla risposta di bua, ho compilato alcune delle risposte più concrete.
Qual è l'utilizzo dello spazio (memoria) di (in byte):
- lista stessa
sys.getsizeof([]) == 72
- ogni voce dell'elenco (non inclusi i dati)
sys.getsizeof([0, 1, 2, 3]) == 104
, quindi 8 byte oltre testa per voce.
- i dati se è un numero intero
sys.getsizeof(2**62) == 24
(ma varia a seconda delle dimensioni integer)sys.getsizeof(2**63) == 40
sys.getsizeof(2**128) == 48
sys.getsizeof(2**256) == 66
- i dati se è un oggetto (
sizeof(Pyobject)
immagino))sys.getsizeof(C()) == 72
(C è un oggetto user-spazio vuoto)
Se è possibile condividere i dati più generali sulle dimensioni osservati, che sarebbe grande. Ad esempio:
- Ci sono casi speciali (penso che i valori immutabili potrebbero essere condivisi, quindi forse un elenco di bool non occupa spazio aggiuntivo per i dati)?
- Forse gli elenchi di piccole dimensioni richiedono l'overhead di X byte ma gli elenchi di grandi dimensioni richiedono un sovraccarico di byte Y?
potresti voler rispondere alla tua domanda con le informazioni che hai aggiunto, tuttavia è ovvio che bua ha risposto alla parte principale della tua domanda e EOL ha fornito un modo per prevedere in modo più accurato e inserire più elementi nella RAM. –
Questo è stato pubblicato come risposta che doveva essere rimossa come una sola risposta di collegamento, ma sembra che potrebbe essere utile, quindi la sto postando come commento. Il modulo Python della settimana ha pubblicato un articolo su Python Memory Management, che puoi visualizzare qui: http://pymotw.com/2/sys/limits.html – ArtOfWarfare