class ToBeDeleted:
def __init__(self, value):
self.value = val
# Whatever...
def __del__(self):
print self.value
l = [ToBeDeleted(i) for i in range(3)]
del l
Questa stampa 2, 1, 0
.Chiamare "del" su un elenco
Ora, è l'ordine degli elementi eliminati definito da qualche parte nella specifica o è specifico dell'implementazione? (o forse non capisco i meccanismi sottostanti)
Potrebbe l'uscita, ad esempio, essere
0, 1, 2
? Mi rendo conto che l'ordine2, 1, 0
è probabilmente eseguito per evitare la riallocazione della memoria per gli elementi durante la cancellazione, ma rimane comunque la domanda.E l'ultimo - qual è la differenza tra
del l
edel l[:]
dichiarazioni?
Molto dubbio che l'ordine di chiamate al '__del __()' è specificato da nessuna parte. Non pensate nemmeno di provare a scrivere codice che si basa su un particolare ordine. –
Anche se l'ordine è stato specificato, è possibile mantenere i riferimenti agli elementi della lista ovunque, quindi l'ordine in cui i metodi '__del__' vengono chiamati sarà diverso dall'ordine in cui i riferimenti vengono rimossi dall'elenco. – millimoose