Default Mutable Arguments

Ver los problemas que puede crear un argumento default mutables

Ver cómo resolverlo

Entender cómo o cuando se evalua una función.

Objetos mutables e inmutables

-Cada variable en Python contiene una instancia de un objeto.

-Hay dos tipos de objetos en Python: objetos mutables e inmutables.

-Cada vez que un objeto es instanciado, se le asigna un id de objeto único.

-El tipo del objeto se define en tiempo de ejecución y no se puede cambiar después.

-Sin embargo, su estado puede cambiarse si es un objeto mutable.

Inmutables: objetos que no los puedo cambiar una vez que los cree, e.g., float, tuple (aunque una tuple puede contener objetos mutables)

Mutables: objetos que, una vez creados, puedo modificar su estado.

Vamos a ver esto en PythonTutor

Objetivo: En Python Tutor ver lo que singifica mutable y no mutable

a = [1, 2, 3]
print(id(a))
a.append(4)
print(id(a))

b = a
print(b)

a.append(5)
print(a)
print(b)

a = 3
print(id(a))
b = a
print(id(b))
a = 4
print(a)
print(b)
print(id(a))

Argumentos mutables

Lo que está pasando es que el default está cambiando.

Si no ingreso una lista, la lista default se modifica e incluye los nombres anteriores, por se un objeto mutable.

Escribir en orden, en Pythontutor,para ver como va cambiando el default ````python def add_name(name, name_list = []): name_list.append(name) print(name_list)

print(add_name.defaults) c = add_name("juan") print(add_name.defaults) d = add_name("maria") print(add_name.defaults)

Para corregirlo, se sustituye el objeto mutable de la función de la siguiente manera

El valor por defecto se evalúa una sola vez cuando se crea la función, y se establece en ese valor cada vez que llamamos a la función