Ahora trataremos el tema de "Referencias a Listas". Analicemos las siguientes instrucciones. Tenemos una lista "a" cuyos elementos son los números uno, dos y tres. Una lista "b" con los mismos elementos. Creamos una variable "c" a la cual asignamos la lista "a" y si le pedimos a Spyder que nos muestre el contenido de las variables "a", "b" y "c", podemos constatar que son iguales. Sin embargo, miremos qué sucede en la memoria del computador. Las variables "a" y "b" referencian a listas diferentes, aunque tengan el mismo contenido, mientras que la variable "c" referencia a la misma lista a la cual referencia la variable "a". Eso se debe a que con estas dos primeras instrucciones hemos creado dos listas diferentes. Sin embargo, haciendo esa asignación lo que estamos haciendo es guardando en la variable "c" la misma lista que creamos cuando la asignamos a la variable "a". Esto lo podemos saber utilizando el operador "is". ¿Cómo funciona este operador? "is" nos devuelve "True" si dos variables apuntan al mismo objeto, es decir, si ambas apuntan a la misma zona de memoria, y nos devuelve "False" en caso contrario. Dado que "a" y "b" son listas diferentes, a pesar de que tienen los mismos elementos, si preguntamos a Python si "a" es igual "b", él nos va a responder que True. Si "b" es igual a "c", igualmente nos va a decir que es "True". "a" igual a "c" es también true, porque las tres listas contienen los mismos elementos. Sin embargo, "a" no es "b", ¿por qué? Porque las dos variables apuntan a estructuras diferentes. "b" no es "c", "b" apunta a su propia lista, "c" sabemos que apunta a la misma lista a la cual apunta "a". "a", en cambio, si es igual a "c", es decir "a" es "c", porque los dos no solamente contienen los mismos elementos, sino que referencian a la misma zona de memoria. Debemos tener entonces mucho cuidado. Si dos variables apuntan a la misma lista, al modificar una, se va a cambiar la otra. Si hacemos algún cambio en la lista "c", dado que esta apunta, referencia, a la misma lista a la cual referencia la variable "a", este mismo cambio se verá reflejado si consultamos el contenido de "a". Veamos esto. Guardamos en la posición cero de la lista "c" el valor cuatro. Sin embargo, la lista "c" es esta misma a la cual apunta "a". Guardamos aquí un cuatro, por consiguiente, si consultamos el valor de la lista "a", veremos que su primer elemento ya no es uno sino cuatro. En cambio "b", sigue siendo la misma lista original porque no la hemos tocado y "c", dado que es la misma lista a la cual apunta, pues tendrá como elementos cuatro, dos y tres. Esto mismo pasa con los parámetros, ¿por qué? Porque un parámetro de tipo "list" es en realidad una referencia a la lista. Veamos este ejemplo. Tenemos una función llamada "duplicar", que recibe como parámetro una lista de enteros, espera, no retorna nada y lo que hace esta función es duplicar, o sea, multiplicar por dos cada uno de los valores de la lista que entra como parámetro y lo guarda en la misma posición del valor inicial. Miremos entonces el resultado de la ejecución. Tenemos nuestra lista "números" con los valores uno, dos, tres, cuatro, cinco, llamamos a la función duplicar con la lista "números". Al finalizar esta función, si miramos el contenido de nuestra lista "números", veremos que sus valores fueron afectados. Por consiguiente, si queremos modificar una lista y mantener una copia de la lista original, tenemos que sacar una copia de la misma lista, no solo de su referencia. A este proceso lo llamamos "cloning" y una opción para implementarlo es con el operador de corte, "slice". Veamos este ejemplo: tenemos nuestra lista "a" con los elementos uno, dos y tres, inicializamos una variable "b" a la cual asignamos la lista completa, el contenido completo de la lista "a". "b" es una copia de "a", decimos que es un clon, tienen el mismo contenido, lo podemos observar acá. Sin embargo, no referencian a la misma lista. Si preguntamos, "a" igual a "b", Python nos va a responder que es verdadero porque tienen los mismos elementos por dentro, pero "a" no es "b" porque son referencias a estructuras diferentes.