Читать книгу El gran libro de Python - Marco Buttu - Страница 63
Modificación de objetos mutables
ОглавлениеLos objetos mutables pueden ser modificados solo de tres maneras: mediante sus métodos, mediante las asignaciones aumentadas y mediante la instrucción del. Por ejemplo, los métodos list.append() y list.sort() de una lista modifican el objeto:
Las asignaciones aumentadas, como se especifica en la PEP-0203, también modifican el objeto:
Por último, la instrucción del, utilizada en un contexto de indexación o fragmentación, permite eliminar los elementos de un objeto contenedor, modificando así dicho objeto:
Si, en cambio, se aplica una simple etiqueta, solo tiene el efecto de eliminarla del namespace:
Cuando un objeto ya no tiene etiquetas que se refieran a él, Python libera la memoria que ocupaba:
NOTA
Los objetos en CPython tienen internamente dos campos: un descriptor de tipo, utilizado para determinar el tipo del objeto, y un contador de referencias, utilizado para saber si el objeto ya no tiene etiquetas que le hagan referencia y, por tanto, si puede ser eliminado de la memoria. Para más detalles: http:// docs.python.org/py3k/c-api/intro.html.
Vamos a aclarar este concepto con ilustraciones. Inicialmente han sido creadas dos etiquetas a y b que hacían referencia al mismo objeto, como muestra la Figura 1.8.
Figura 1.8 - Las dos etiquetas a y b hacen referencia al mismo objeto.
La instrucción del a ha cancelado la etiqueta a, pero la memoria no ha sido liberada por el objeto puesto que todavía había una etiqueta que hacia referencia a él, como se muestra en la Figura 1.9.
Figura 1.9 - La instrucción del a ha eliminado la etiqueta a, pero no el objeto al cual se refería.
En cambio, cuando ha sido cancelada también la etiqueta b, el objeto ya no tenía más etiquetas que le hicieran referencia, por lo que, siendo inutilizable, Python ha ejecutado el método _ _del_ _() y después ha liberado la memoria que ocupaba el objeto.