Brève description du code:Fonction qui retourne le dictionnaire en écrasant tous les dictionnaires
Le code principal crée d'abord un dictionnaire vierge, qui est transmis à ma fonction. La fonction détermine le nombre de chaque nombre et met à jour le dictionnaire qui est ensuite renvoyé. Cependant, lorsque la fonction s'exécute, elle écrase l'entrée 'blank_dictionary' pour qu'elle soit identique au dictionnaire qu'elle renvoie ('new_dictionary'). Pourquoi cela arrive-t-il? Je veux que le "dictionnaire" dans le code principal reste vide tout au long afin qu'il puisse être réutilisé.
def index_list(lst, blank_dictionary):
new_dictionary = blank_dictionary
for i in lst:
new_dictionary[i] += 1
return new_dictionary
number = 1
maximum = 3
numbers = range(1,maximum+1)
dictionary = {}
for i in numbers:
dictionary[i] = 0
print ('original blank dictionary', dictionary)
new_dictionary = index_list([3,3,3],dictionary)
print ('new dictionary which indexed the list', new_dictionary)
print ('should still be blank, but isnt', dictionary)
Sorties:
original blank dictionary {1: 0, 2: 0, 3: 0}
new dictionary which indexed the list {1: 0, 2: 0, 3: 3}
should still be blank, but isnt {1: 0, 2: 0, 3: 3}
Merci beaucoup
Copie possible de [Comment copier un dictionnaire et modifier uniquement la copie] (http://stackoverflow.com/questions/2465921/how-to-copy-a-dictionary-and-only-edit-the-copy –
Oui, merci @PierPaolo. – PurpleDiane
[Lire sur la façon dont les variables et l'affectation fonctionnent en Python.] (Https://nedbatchelder.com/text/names.html) – user2357112