Читать книгу El gran libro de Python - Marco Buttu - Страница 61

El vínculo entre las etiquetas y los objetos

Оглавление

Como ya sabemos, en Python no existen las declaraciones, y el tipo de los objetos es establecido cuando el programa se ejecuta. Quizás ahora nos preguntemos cuál es el papel de las etiquetas, puesto que podemos asignar objetos de distintos tipos a la misma etiqueta:


La idea es que una etiqueta es simplemente un identificador mediante el cual se hace referencia al objeto. Esto significa que la primera asignación vincula la etiqueta var al objeto que representa el número 44, de tipo int, como se muestra en la Figura 1.1.


Figura 1.1 - Asignación de la etiqueta var a un número entero de valor 44.

La segunda asignación vincula var a un nuevo objeto, que representa el número 99 y también de tipo int, y ya no existe ninguna vinculación entre var y el objeto que representa el número 44. Además, este último no tiene ninguna etiqueta que haga referencia a aquel, por lo que no puede ser utilizado de ningún modo; Python, por tanto, libera la memoria que ocupaba, como se muestra en la Figura 1.2.


Figura 1.2 - Asignación de la etiqueta var a un nuevo número entero, de valor 99. El 44 deja la memoria libre.

Por último, la tercera asignación vincula var al objeto que representa la cadena 'python', como se muestra en la Figura 1.3.


Figura 1.3 - Asignación de un nuevo objeto de tipo str a la etiqueta var.

Para agilizar la exposición, de ahora en adelante en este libro no volveremos a hablar de objeto que representa a un número o una cadena, sino que diremos simplemente objeto de tipo int, objeto de tipo str, etc. Además, utilizaremos el término referencia para indicar el vínculo entre la etiqueta y el objeto:


Una etiqueta puede ser utilizada solo tras haber sido asignada a un objeto:


NOTA

Como podemos observar en este ejemplo, el término utilizado por el intérprete para indicar lo que nosotros hemos denominado "etiqueta" es name. Gran parte de los libros y de la documentación en inglés también utiliza este término.

Una operación de asignación a una etiqueta ya existente no modifica nunca el objeto que le ha sido asignado:


Esto no siempre es cierto, incluso si el objeto es mutable. Consideremos, por ejemplo, la siguiente lista:


que representamos en la Figura 1.4.


Figura 1.4 - Representación de la referencia entre la etiqueta var y la lista [1, 2, 3].

Si realizamos la asignación var = [1, 2, 3] + [4], aunque la lista sea mutable, el objeto con el identificador 3073876076 no se modifica. Esta instrucción solo tiene como efecto crear un nuevo objeto de tipo lista y asignarlo a la etiqueta `var`:


La lista anterior ya no sirve porque ya no existen más etiquetas que hagan referencia a ella, por lo que Python libera la memoria ocupada, como mostramos de forma esquemática en la Figura 1.5.


Figura 1.5 - La etiqueta var se refiere a la lista [1, 2, 3, 4]. La lista [1, 2, 3] libera la memoria.

El efecto explícito de la asignación es, por tanto, siempre y solo crear un vínculo entre la etiqueta y el objeto a la derecha del signo igual.

Si nos conviene tener una representación visual de lo que sucede cuando en el interior de una expresión hay una etiqueta, podemos pensar (sin cometer ningún error lógico) en que Python sustituye la etiqueta por el objeto al que se refiere.

La creación de las referencias entre etiquetas y objetos se lleva a cabo de la misma forma en todos los modos de asignación, incluso también para el implícito, como, por ejemplo, en el caso de las etiquetas asignadas implícitamente en las instrucciones for:


donde la etiqueta item para cada iteración se refiere al correspondiente objeto incluido en la lista.

Otro caso de asignación implícita es el paso de los argumentos a una función, en el cual las etiquetas utilizadas como parámetros hacen referencia a los respectivos objetos pasados como argumentos, y no a su copia:


En realidad, cuando se realiza la llamada foo(a, b), se llevan a cabo las asignaciones implícitas par1=a y par2=b, y podemos pensar que a será sustituida por el objeto al cual hace referencia, igual que b.

También la definición de una función da lugar a una asignación implícita. La instrucción def crea un objeto función y lo asigna a la etiqueta situada entre la def y los paréntesis:



Con la indexación se obtiene el mismo comportamiento. Por ejemplo, en el código siguiente podemos pensar que mylist[0], mylist[1] y mylist[2] serán sustituidos por los objetos a los cuales hacen referencia:


El gran libro de Python

Подняться наверх