en Python nuevos ámbitos (también conocido como espacios de nombres) son única creada por módulos, clases y funciones, pero no para cualquier otra declaración, especialmente no para with
y if
bloques. Los identificadores enlazados dentro del cuerpo de las declaraciones with
o for
están, por lo tanto, vinculados en el ámbito circundante más interno, que es el alcance de nivel superior del intérprete interactivo en su caso. Los identificadores están vinculados en un ámbito siempre que este alcance sea válido o hasta que se eliminen explícitamente del alcance (utilizando del
como en del fal
).
Los objetos solo se pueden limpiar cuando ya no se hace referencia a ellos. El momento real, en el que este objeto está realmente limpio, sin embargo no está definido. Python utiliza la recolección de elementos no utilizados para la administración de la memoria y no aplica una estrategia específica. En CPython, que utiliza el recuento de referencias, los objetos se limpian de inmediato, una vez que la última referencia queda fuera del alcance. Implementaciones alternativas como PyPy o Jython utilizan recolectores de basura más avanzados, que limpian objetos sin referencia en puntos de tiempo arbitrarios.
Esto significa, que en el ejemplo de los objetos unidos a f
y fal
se Bascially nunca se limpian, ya que el ámbito de nivel superior de la intérprete interactivo no existe de forma natural, siempre que el interpeter se está ejecutando. Sin embargo, tenga en cuenta que esto no es realmente un problema, ya que, sin embargo, están cerrados correctamente y ya no reclaman ningún recurso de archivo, sino solo algo de memoria.
Aquí está [PEP 343] (http://www.python.org/dev/peps/pep-0343/) para leer un poco. –