1
+ # 05 - VALOR Y REFERENCIA
2
+
3
+ # Asignación de variables por valor, se copia, tipo de dato primitivo
4
+
5
+ # int
6
+ valor1 = 10
7
+ valor2 = valor1
8
+ print ("int: " , valor1 , valor2 , sep = " " )
9
+ valor2 = 20
10
+ print ("int: " , valor1 , valor2 , sep = " " )
11
+ # float
12
+ valor1 = 10.5
13
+ valor2 = valor1
14
+ print ("float: " , valor1 , valor2 , sep = " " )
15
+ valor2 = 20.5
16
+ print ("float: " , valor1 , valor2 , sep = " " )
17
+ # boolean
18
+ valor1_1 = True
19
+ valor2_2 = valor1_1
20
+ print ("boolean: " , valor1_1 , valor2_2 , sep = " " )
21
+ valor2_2 = False
22
+ print ("boolean: " , valor1_1 , valor2_2 , sep = " " )
23
+ # string
24
+ valor1 = "Hola"
25
+ valor2 = valor1
26
+ print ("string: " , valor1 , valor2 , sep = " " )
27
+ valor2 = "Adios"
28
+ print ("string: " , valor1 , valor2 , sep = " " )
29
+
30
+
31
+ # Asignación de variables por referencia, usa el mismo espacio de memoria, tipo de dato complejo
32
+ # list
33
+ valor1 = [1 , 2 , 3 ]
34
+ valor2 = valor1
35
+ print ("list: " , valor1 , valor2 , sep = " " )
36
+ valor2 .append (4 )
37
+ print ("list: " , valor1 , valor2 , sep = " " )
38
+ # tuple
39
+ valor1 = (1 , 2 , 3 )
40
+ valor2 = valor1
41
+ print ("tuple: " , valor1 , valor2 , sep = " " )
42
+ # dict
43
+ valor1 = {"a" : 1 , "b" : 2 }
44
+ valor2 = valor1
45
+ print ("dict: " , valor1 , valor2 , sep = " " )
46
+ valor1 ["a" ] = 3
47
+ print ("dict: " , valor1 , valor2 , sep = " " )
48
+ # set
49
+ valor1 = {1 , 2 , 3 }
50
+ valor2 = valor1
51
+ print ("set: " , valor1 , valor2 , sep = " " )
52
+ valor1 .add (4 )
53
+ print ("set: " , valor1 , valor2 , sep = " " )
54
+ # frozenset
55
+ valor1 = frozenset ({1 , 2 , 3 })
56
+ valor2 = valor1
57
+ print ("frozenset: " , valor1 , valor2 , sep = " " )
58
+ # bytearray
59
+ valor1 = bytearray (b"abc" )
60
+ valor2 = valor1
61
+ print ("bytearray: " , valor1 , valor2 , sep = " " )
62
+ valor1 [0 ] = 100
63
+ print ("bytearray: " , valor1 , valor2 , sep = " " )
64
+
65
+
66
+ # EXTRA
67
+ ''' * Crea dos programas que reciban dos parámetros (cada uno) definidos como variables anteriormente.
68
+ * - Cada programa recibe, en un caso, dos parámetros por valor, y en otro caso, por referencia.
69
+ * Estos parámetros los intercambia entre ellos en su interior, los retorna, y su retorno
70
+ * se asigna a dos variables diferentes a las originales. A continuación, imprime el valor de las
71
+ * variables originales y las nuevas, comprobando que se ha invertido su valor en las segundas.
72
+ * Comprueba también que se ha conservado el valor original en las primeras.
73
+ def1(a,b), 2 parametros
74
+ def2(a,b), '''
75
+
76
+ # Funcion por valor
77
+ def program1 (a :int , b : int ) -> tuple :
78
+ temp = a
79
+ a = b
80
+ b = temp
81
+ return a , b
82
+ value1 = 10
83
+ value2 = 20
84
+ print ("value1" , value1 , "value2" , value2 )
85
+ value3 , value4 = program1 (value1 , value2 )
86
+ print ("value1" , value1 , "value2" , value2 )
87
+ print ("value3" , value3 , "value4" , value4 )
88
+
89
+ # Funcion por referencia
90
+ def program2 (a :list , b : list ) -> tuple :
91
+ a , b = b , a
92
+ return a , b
93
+ value1 = [10 , 20 ]
94
+ value2 = [20 , 30 ]
95
+ print ("value1" , value1 , "value2" , value2 )
96
+ value3 , value4 = program2 (value1 , value2 )
97
+ print ("value1" , value1 , "value2" , value2 )
98
+ print ("value3" , value3 , "value4" , value4 )
99
+
100
+ '''Explicación:
101
+ En ambos casos, lo que se trabaja y se cambia son los variables locales dentro de las funciones.
102
+ Aunque salga un error al cambiar por referencia, no afectará a las variables originales.
103
+ En el caso de que se quiera cambiar el valor de las variables originales,
104
+ se deberá convertir las variables locales en datos compuestos;
105
+ listas a[:], b[:] = b[:], a[:].'''
0 commit comments