Repaso
English
PythonIntermedioPY-02

¿Qué imprime esto?

def add(item, bucket=[]):
    bucket.append(item)
    return bucket

add(1)
print(add(2))

Opciones

  1. [2]
  2. [1, 2] (Opción correcta)
  3. TypeError
  4. [[1], [2]]

Respuesta

[1, 2]

Por qué

Python crea un valor por defecto solo UNA vez, cuando se ejecuta la línea def, no en cada llamada.

Aquí el valor por defecto es un único objeto lista. Cada llamada que no pasa bucket reutiliza esa misma lista: la primera llamada añade 1, la segunda añade 2 a la misma lista, así que imprime [1, 2].

Solución: usa None como valor por defecto y crea una lista nueva dentro de la función.

def add(item, bucket=None):
    if bucket is None:
        bucket = []
    bucket.append(item)
    return bucket

Recuerda

Nunca uses [], {} o set() como argumento por defecto.

Términos clave

Practica esta pregunta en Repaso