Digamos que tengo este código:dict.get() devuelve un puntero
my_dict = {}
default_value = {'surname': '', 'age': 0}
# get info about john, or a default dict
item = my_dict.get('john', default_value)
# edit the data
item[surname] = 'smith'
item[age] = 68
my_dict['john'] = item
El problema se hace evidente, si ahora comprobar el valor de default_value:
>>> default_value
{'age': 68, 'surname': 'smith'}
Es obvio , que my_dict.get()
no devolvió el valor de default_value, sino un puntero (?) a él.
El problema se podía resolver en torno al cambiar el código para:
item = my_dict.get('john', {'surname': '', 'age': 0})
pero eso no parece ser una buena manera de hacerlo. Alguna idea, comentarios?
Este es un principio muy importante de pitón - * * todos los valores se pasan por referencia. La mutabilidad de esas referencias es un tema completamente diferente (aunque a menudo hace estallar a las personas de esta manera). –
Estoy seguro de haber leído sobre esto antes, pero tiendes a olvidar cosas cuando no utilizo un idioma por mucho tiempo. Gracias por aclararlo. – Armandas
¿Por qué su respuesta es diferente a la respuesta proporcionada en la pregunta? La pregunta parece ser más sobre encontrar una forma elegante de devolver una nueva instancia de la dict, pero solo crearla como y cuando sea necesario. – Dunes