Hola de nuevo. Hoy continuaremos estudiando los diccionarios y cómo usarlos en Python. Empecemos. Es muy importante entender que, a diferencia de otros tipos de datos, los diccionarios cambian. Esto significa que cuando se agrega, se modifica o se elimina una llave de un diccionario, no es que esté creando una copia modificada, sino que el mismo diccionario se modifica. Este hecho de que los diccionarios sean mutables hace que todos los cambios que se realicen en un diccionario que llegue a una función como parámetro se vean reflejados también fuera de la función. Y cuando dos variables referencian al mismo diccionario, los cambios en una afectan a la otra, porque en realidad las variables están apuntando a la misma zona de memoria. Veamos el ejemplo. Las variables "alias" y "directorio" referencian al mismo diccionario. Es decir, que si usáramos el operador "is" un alias y "directorio", la respuesta sería "true". Veamos. En la línea 132, aunque estamos modificando únicamente a "alias", cuando imprimimos tanto "alias" como "directorio", podemos observar que los dos han sido modificados. Dado que los diccionarios son mutables, si queremos conservar el diccionario original tenemos que sacar una copia y para eso podemos usar el método "copy". Veamos el ejemplo. En la línea 136 creamos el diccionario "opuestos" y en la línea 137 le asignamos a "alias" ese diccionario. Ya sabemos que solo tenemos un diccionario y que tanto "opuestos" como "alias" están apuntando a este. Y en la línea 139, guardamos en la variable "copia" una copia de "opuestos", usando el método "copy". Hasta el momento, todo va bien. Ahora, la línea 160 modificamos "alias". Y al imprimir las tres variables "opuestos", "alias" y "copia", nos damos cuenta que ese cambio afectó tanto a "puestos" como "alias" y no a "copia" tal como lo hubiéramos esperado. ¿Por qué? Porque "copia" es literalmente una copia del diccionario original, resultado de utilizar el método "copy". Ahora veamos. En la línea 170, estamos modificando "copia" y, al imprimir nuevamente las tres variables, sin sorpresas pero, podemos notar que la única que tuvo efecto el cambio fue en "copia". También, podemos eliminar una pareja "llave:valor" del diccionario y para esto usamos el operador "del", pero cuidado, recuerden que siempre se eliminará tanto la llave como el valor. Es muy importante saber que, al igual que cuando consultamos un diccionario, si la llave no existe, se producirá un error. Entonces, antes de utilizar el operador "del", es recomendable asegurarse de que la llave exista. Ahora que sabemos que los diccionarios son mutables, podemos hacer la diferencia entre un parámetro por valor y uno por referencia. Primero, y simplificando un poco la parte técnica en Python, todos los parámetros de los tipos "int", "float", "str" y "bool" son parámetros por valor, mientras que los parámetros de tipo "dict" son por referencia. Veamos un ejemplo con un parámetro de tipo entero. Tenemos una función que recibe el parámetro "a" que es de tipo "int". Noten que la función no retorna nada. En el cuerpo de la función se imprimen un par de mensajes, se incrementa el valor de "a" y nuevamente se imprime el mensaje. También tenemos un programa principal donde le pedimos al usuario que digite un número entero, imprimimos dicho número, llamamos a la función y volvemos a imprimir. Veamos qué imprime nuestro programa cuando el número ingresado por el usuario es 43. Imprimimos que el valor de la variable "var" antes de invocar a la función, es 43. Luego invocamos la función usando como parámetro "var" y se imprime el mensaje de bienvenida en la función. Luego, imprimimos el valor del parámetro, es decir, 43 nuevamente. Incrementamos en uno el valor del parámetro y lo imprimimos, y así obtenemos el número 44. En este punto se termina la función y volvemos al programa principal donde imprimimos nuevamente el valor de "var", que sigue siendo 43. ¿Por qué? Bueno, porque cuando se pasan parámetros por valor se pasa una copia para que se utilice dentro de la función, así que, estos cambios son sólo locales, es decir, dentro del contexto de la función. Hagamos el mismo ejercicio pero esta vez con un parámetro de tipo "dict". Tenemos exactamente el mismo programa adaptado a la sintaxis de diccionarios. Por eso, tanto la línea cuatro, la forma como hacemos el incremento, y en la línea 11, donde construimos el diccionario con el valor ingresado por el usuario, son diferentes, pero el resto es idéntico. El cambio principal de lo que imprime este programa está en la línea 14, que imprime valor de "dict" una vez ejecutada la función. La diferencia es que, en esta ocasión, los cambios que se realizaron en la función también son visibles en el programa principal. Es decir, que "dict" sí se modificó. Esto sucede porque cuando se pasan parámetros por referencia, lo que se hace es entregar a la función una referencia al elemento sin copiar. Les propongo terminar este tema con una pregunta.