¿Por qué el uso de None soluciona el problema del argumento predeterminado mutable de Python?
Estoy en el punto de aprender Python donde estoy tratandoel problema Argumento predeterminado mutable.
def bad_append(new_item, a_list=[]):
a_list.append(new_item)
return a_list
def good_append(new_item, a_list=None):
if a_list is None:
a_list = []
a_list.append(new_item)
return a_list
Entiendo quea_list
se inicializa solo cuando eldef
La declaración se encuentra por primera vez, y es por eso que las llamadas posterioresbad_append
Usa el mismo objeto de lista.
Lo que no entiendo es por quégood_append
Funciona de forma diferente. Parece quea_list
haríatodavía ser inicializado una sola vez; por lo tanto, elif
declaración solo sería verdadera en la primera invocación de la función, lo que significaa_list
solo se restablecería a[]
en la primera invocación, lo que significa que todavía se acumularía todo el pasadonew_item
Los valores y todavía estar en buggy.
¿Por qué no lo es? ¿Qué concepto me estoy perdiendo? Cómoa_list
limpiarse cada vezgood_append
¿carreras?