
Un compartamiento en Python que sorprenden incluso a desarrolladores experimentados.
🚨 Argumentos Mutables por Defecto#
Observa este código:
def prueba(argumento = []):
argumento.append(1)
return argumento
print(prueba()) # [1]
print(prueba()) # [1, 1] ¿Sorprendido?¿Por qué ocurre esto?#
El argumento por defecto argumento = [] se crea UNA SOLA VEZ cuando se define la función, no cada vez que la llamas. Todas las llamadas a prueba() sin argumentos comparten la MISMA lista en memoria.
Solución correcta:
def prueba(argumento = None):
if argumento is None:
argumento = []
argumento.append(1)
return argumentoLección clave#
Python es un lenguaje increíblemente poderoso, pero conocer estos detalles te ayuda a evitar bugs difíciles de detectar.
También publicado en LinkedIn.
