|
| 1 | +''' Muestra ejemplos de asignación de variables "por valor" y "por referencia", según |
| 2 | +su tipo de dato. |
| 3 | +- Muestra ejemplos de funciones con variables que se les pasan "por valor" y |
| 4 | +"por referencia", y cómo se comportan en cada caso en el momento de ser modificadas. |
| 5 | + ''' |
| 6 | +# Asignación de variables "por valor" (entero, un objeto inmutable) |
| 7 | +a = 10 |
| 8 | +b = a # Se crea una copia del valor |
| 9 | +b += 5 # Modificamos solo b |
| 10 | + |
| 11 | +print(a) # a = 10 |
| 12 | +print(b) # b = 15 |
| 13 | + |
| 14 | +# Asignación de variables "por referencia" (lista, un objeto mutable) |
| 15 | +lista_a = [1, 2, 3] |
| 16 | +lista_b = lista_a # Se comparte la referencia al mismo objeto |
| 17 | +lista_b.append(4) # Modificamos la lista compartida |
| 18 | + |
| 19 | +print(lista_a) # lista_a ahora es [1, 2, 3, 4] |
| 20 | +print(lista_b) # lista_b también es [1, 2, 3, 4] |
| 21 | + |
| 22 | +#Funciones con variables "por valor" (objetos inmutables): |
| 23 | + |
| 24 | +def modificar_valor(num): |
| 25 | + num += 10 |
| 26 | + print("Dentro de la función:", num) #resultado: 15 |
| 27 | + |
| 28 | +a = 5 |
| 29 | +modificar_valor(a) |
| 30 | +print("Fuera de la función:", a) #resultado = 5 |
| 31 | +#En este caso, aunque num se modifica dentro de la función, la variable original a fuera de la función no se ve afectada, ya que los enteros son inmutables. |
| 32 | + |
| 33 | + |
| 34 | +#Funciones con variables "por referencia" (objetos mutables): |
| 35 | +def modificar_lista(lista): |
| 36 | + lista.append(4) |
| 37 | + print("Dentro de la función:", lista) #resultado: [1, 2, 3, 4] |
| 38 | + |
| 39 | +mi_lista = [1, 2, 3] |
| 40 | +modificar_lista(mi_lista) |
| 41 | +print("Fuera de la función:", mi_lista) #resultado: [1, 2, 3, 4] |
| 42 | +#Aquí, la lista original "mi_lista" se ve afectada por la función, ya que las listas son objetos mutables y se pasan por referencia. |
| 43 | + |
| 44 | +''' |
| 45 | +DIFICULTAD EXTRA (opcional): |
| 46 | + Crea dos programas que reciban dos parámetros (cada uno) definidos como variables anteriormente. |
| 47 | +- Cada programa recibe, en un caso, dos parámetros por valor, y en otro caso, por referencia. |
| 48 | +Estos parámetros los intercambia entre ellos en su interior, los retorna, y su retorno |
| 49 | +se asigna a dos variables diferentes a las originales. A continuación, imprime el valor de las |
| 50 | +variables originales y las nuevas, comprobando que se ha invertido su valor en las segundas. |
| 51 | +Comprueba también que se ha conservado el valor original en las primeras. |
| 52 | + ''' |
| 53 | +def intercambio_por_valor(a, b): |
| 54 | + # Intercambio de valores |
| 55 | + temp = a |
| 56 | + a = b |
| 57 | + b = temp |
| 58 | + return a, b |
| 59 | + |
| 60 | +# Variables originales |
| 61 | +x = 5 |
| 62 | +y = 10 |
| 63 | + |
| 64 | +# Llamada a la función y asignación de los nuevos valores |
| 65 | +nuevo_x, nuevo_y = intercambio_por_valor(x, y) |
| 66 | + |
| 67 | +# Imprime los resultados |
| 68 | +print("Variables originales: x =", x, ", y =", y) |
| 69 | +print("Nuevas variables: nuevo_x =", nuevo_x, ", nuevo_y =", nuevo_y) |
| 70 | + |
| 71 | +def intercambio_por_referencia(lista): |
| 72 | + # Intercambio de elementos en la lista |
| 73 | + temp = lista[0] |
| 74 | + lista[0] = lista[1] |
| 75 | + lista[1] = temp |
| 76 | + return lista |
| 77 | + |
| 78 | +# Lista original |
| 79 | +mi_lista = [5, 10] |
| 80 | + |
| 81 | +# Llamada a la función y asignación de la nueva lista |
| 82 | +nueva_lista = intercambio_por_referencia(mi_lista.copy()) |
| 83 | + |
| 84 | +# Imprime los resultados |
| 85 | +print("Lista original:", mi_lista) |
| 86 | +print("Nueva lista:", nueva_lista) |
0 commit comments