"preoccupazione" è fuori luogo, ma se il programma risulta essere lenta, consumare più memoria del previsto, o hanno strano inspiegabile pause, la causa è davvero probabile che si trovi in quei loop di riferimento della spazzatura: devono essere raccolti con una procedura diversa dai grafici di riferimento "normali" (aciclici), e quella raccolta è occasionale e può essere lenta se si dispone di molto di oggetti legati in tali loop (la raccolta ciclico-spazzatura è anche inibita se un oggetto nel ciclo ha un metodo speciale __del__
).
Pertanto, i loop di riferimento non influiscono sulla correttezza del programma, ma possono influire sulle sue prestazioni e/o sul footprint.
Se e quando si desidera rimuovere loop indesiderati di riferimenti, è possibile utilizzare spesso il modulo weakref nella libreria standard di Python.
Se e quando si desidera esercitare un controllo più diretto (o eseguire il debug, vedere cosa sta accadendo esattamente) riguardo la garbage collection ciclica, utilizzare il modulo gc nella libreria standard di Python.
fonte
2010-03-11 21:37:46
Più 1 per la nota su '__del__'. Se i tuoi distruttori di oggetti hanno effetti collaterali, allora potresti voler pensare a riferimenti ciclici (e quando le cose vengono distrutte) un po 'più attentamente. – speedplane