2009-06-24 12 views

Respuesta

18

Sí y no. El objeto se destruirá después de salir de foo (siempre que ninguna otra cosa tenga una referencia), pero si es inmediato o no es un detalle de implementación, y variará.

En CPython (la implementación estándar de python), se utiliza el recuento, por lo que el elemento se destruirá inmediatamente. Hay algunas excepciones a esto, como cuando el objeto contiene referencias cíclicas, o cuando las referencias se mantienen al marco adjunto (por ejemplo, se genera una excepción que conserva una referencia a las variables del marco).

En implementaciones como Jython o IronPython sin embargo, el objeto no se finalizará hasta que el recolector de basura entre en acción.

Como tal, no debe confiar en la finalización oportuna de los objetos, sino solo debe suponer que se destruirá en algún momento después del la última referencia va. Cuando necesite realizar una limpieza en función del alcance léxico, explícitamente llame a un método de limpieza o consulte el nuevo with statement en python 2.6 (disponible en 2.5 con "from __future__ import with_statement").

+2

+1: La variable, 'a' está en un espacio de nombres que se elimina inmediatamente. Esto es lo que disminuye los recuentos de referencia. La variable existe en una estructura similar a una pila. El objeto subyacente no. –

Cuestiones relacionadas