En Python, los tipos de datos pueden ser divididos en dos categorías principales: tipos de valor y tipos de referencia
Esto es algo común en muchos lenguajes de programación. Entender las diferencias entre ambas es muy importante (o podéis meter la pata elegantemente en algún momento 😉).
Si quieres aprender más sobre el Tipos valor y Referencia
consulta el Curso de Introducción a la Programación leer más
Tipos valor
Los tipos valor en Python son aquellos cuyas variables almacenan directamente el valor real. Esto significa que cuando asignamos una variable a otro valor, se crea una nueva copia de ese valor en la memoria.
Los tipos de valor más comunes en Python son los tipos básicos como enteros, flotantes, cadenas y booleanos.
Por ejemplo,
# Asignación de un entero a una variable
x = 10
# Se crea una nueva copia del valor 10 en la memoria para la variable x
y = x
# Ahora x e y tienen valores independientes en la memoria
Cuando modificamos x
o y
, cada variable tiene su propio espacio en la memoria para almacenar su valor.
Tipos referencia
Los tipos referencia son aquellos cuyas variables almacenan una referencia (normalmente la dirección de memoria) al objeto real en lugar del valor real en sí mismo.
Esto significa que cuando asignamos una variable a otra, ambas variables apuntan al mismo objeto en la memoria.
Los tipos de referencia comunes incluyen listas, diccionarios, conjuntos y objetos personalizados.
Vamos a verlo con un ejemplo.
# Asignación de una lista a una variable
lista1 = [1, 2, 3]
# lista2 apunta al mismo objeto en la memoria que lista1
lista2 = lista1
# Modificar lista2 también modifica lista1
lista2.append(4)
print("lista1:", lista1) # Resultado: [1, 2, 3, 4]
En este ejemplo, cuando modificamos lista2
, también se modifica lista1
porque ambas variables apuntan al mismo objeto en la memoria.
Pasando argumentos a funciones
Cuando pasamos variables a funciones, debemos tener en cuenta si son tipos de valor o tipos de referencia.
Los tipos valor no se modifican cuando son pasados como parámetros, porque la función recibe una copia.
def duplicar_numero(num):
num *= 2
print("Dentro de la función:", num)
x = 10
duplicar_numero(x)
print("Fuera de la función:", x) # x sigue siendo 10, no se modificó
El valor de x
no se modifica fuera de la función duplicar_numero
porque es un tipo de valor.
Los tipos referencia sí se modifican cuando son pasados como parámetros, porque la función recibe una copia de la referencia, que apunta a los mismos datos.
def modificar_lista(lista):
lista.append("Nuevo elemento")
print("Dentro de la función:", lista)
mi_lista = [1, 2, 3]
modificar_lista(mi_lista)
print("Fuera de la función:", mi_lista) # mi_lista se modifica
En este caso, mi_lista
se modifica fuera de la función porque es un tipo de referencia.