... e ogni ciclo for sembrava una di lista.mi sono trovato a oscillare il martello di lista
Invece di:
for stuff in all_stuff:
do(stuff)
stavo facendo (non assegnare la lista per nulla):
[ do(stuff) for stuff in all_stuff ]
Si tratta di un modello comune trovato su list-comp how-to's. 1) OK, quindi non è un problema? Sbagliato. 2) Non può essere solo uno stile di codice? Super sbagliato.
1) Sì che era sbagliato. Come sottolinea NiklasB, l'HowTos è quello di creare una nuova lista.
2) Forse, ma la sua non è evidente ed esplicito, quindi meglio non usarlo.
non ho tenuto a mente che questi how-to erano in gran parte della riga di comando basata. Dopo che la mia squadra ha urlato contro di me chiedendomi perché diavolo stavo costruendo liste massicce e poi lasciandole andare, mi è venuto in mente che potrei introdurre un grosso bug relativo alla memoria.
Così here'er mia domanda/s. Se dovessi farlo in un processo di lunga durata, in cui venivano consumati molti dati, questa "lista" continuerebbe a consumare la mia memoria fino a quando non verrà rilasciata? Quando il garbage collector riporterà indietro la memoria? Dopo lo scopo, questo elenco è integrato è perso?
La mia ipotesi è sì, non mancherà di tenere consumando la mia memoria. Non so come funzioni il garbage collector di Python, ma mi azzarderei a dire che questo elenco esisterà fino a quando l'ultimo next
viene chiamato su all_stuff
.
MODIFICA.
L'essenza della mia domanda è diffusa molto più pulito in this question (grazie per il link Niklas)
Si può fare alcuni benchmark 'timeit' per il vostro ultimo codice bloccare? – Blender
@Blender: Meh, non riesco a dimostrarlo ... Grazie per avermi costretto a impararlo nel modo più duro: P –
C'era una domanda qualche tempo fa a riguardo: [Passando agli iteratori per l'esecuzione per velocità e perché?] (http://stackoverflow.com/q/9144934/1132524) –