__del__()

Ainhoa pln_curro3 en yahoo.es
Vie Jun 6 10:07:45 CEST 2008


Efectivamente, el metodo __del__ no destruye nada, solo desaparecerá el objeto cuando el numero de referencias sea 0.

Aquí, muestro un código, bastante ilustrativo, por si a alguien le puede ayudar:

#!/usr/bin/python
# -*- coding: iso-8859-1 -*-
# vamos a usar el recolecto de basura
import gc


class MiList(list):
def __del__(self):
print "En el _del_"

# Collectable
print "-----> Collectable"
l = MiList()
del l
print "garbage:", gc.garbage

# Uncollecable
print "-----> Uncollectable"
l = MiList()
l.append(l)
del l

# Y ahora vemos como el recolector de basura me lo muestra 
print "Objects unreachable: ", gc.collect()
print "Numero garbage objects: ", len(gc.garbage)
print "Los objetos en el garbage:", gc.garbage


El segundo objeto no se puede borrar porque tiene una referencia circular. 

En fin, el tema de la memoria y python...investigare que es eso de referencias "weakrefs"
Muchas gracias a todos y un saludo

--- El jue, 5/6/08, Chema Cortes <pych3m4 en gmail.com> escribió:
De: Chema Cortes <pych3m4 en gmail.com>
Asunto: Re: [Python-es] __del__()
Para: "Lista de discusión sobre python en castellano" <python-es en aditel.org>
Fecha: jueves, 5 junio, 2008 6:54

El día 5 de junio de 2008 15:53, Ainhoa <pln_curro3 en yahoo.es> escribió:
> Si, es cierto, lo que pasa es que he comprado que de la segunda forma
nunca se llega a ejecutar el __del__ de class, mientras que la primera forma
sí. Lo he comprobado metiendo sencillamente un mensaje a la entrada..

No son la misma cosa. El método __del__ no funciona exactamente como
"destructor" del objeto, si era éso lo que querías conseguir.

En python, un objeto se destruirá sólo cuando no sea necesario, que es
equivalente a decir que han desaparecido todas las referencias que lo
estaban usando.

El método __del__ es invocado automáticamente cuando se vaya a borrar
el objeto de memoria. Si el comando "del" no llama a éste método
será
porque aún conservas una referencia al objeto en algún lugar. Revisa
el código.

Truco: usa referencias débiles ("weakrefs") para evitar este tipo de
problemas
_______________________________________________
Lista de correo Python-es
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes


      ______________________________________________ 
Enviado desde Correo Yahoo! La bandeja de entrada más inteligente.
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es