La complejidad espacial mide cuánta memoria adicional requiere un algoritmo además de la entrada. En Python es clave porque las estructuras incluyen sobrecarga y el manejo de memoria es automático.
Cuenta los bytes necesarios para variables, estructuras y buffers auxiliares. La notación Big-O resume cómo crece ese uso con n:
O(1).O(n).O(n^2).En Python los objetos tienen sobrecarga. Una lista de n referencias consume O(n), y un diccionario crece con la cantidad de pares clave/valor. Los atributos dentro de un objeto suman memoria adicional, aunque la gestión sea automática.
class Nodo:
def __init__(self, nodo_id, valor):
self.nodo_id = nodo_id
self.valor = valor
lista = [Nodo(i, i * 0.5) for i in range(1000)] # O(n) con n = 1000 elementos
Cada llamada recursiva empuja un frame en el stack con sus variables y direcciones de retorno. Si la profundidad es n, el espacio es O(n) aunque el trabajo sea O(log n).
def suma_recursiva(valores, n):
if n == 0:
return 0
return valores[0] + suma_recursiva(valores[1:], n - 1) # profundidad n, espacio O(n)
Prefiere versiones iterativas cuando la profundidad puede ser grande o controla el límite de recursión si aplica.
En Python las estructuras crecen dinámicamente. Una lista o un diccionario expanden su capacidad cuando es necesario, lo que implica sobre-asignación para amortiguar el costo de crecimiento.
def crear_buffer(n):
return [0] * n # O(n) espacio
Listas enlazadas, árboles y grafos almacenan referencias extra; su costo espacial incluye nodos y enlaces.
n.n nodos o tablas de programación dinámica con dimensiones n × n.Elegir estructuras afecta tiempo y memoria:
O(n) o más en espacio.