J'essaie de modifier les valeurs sans réattribuer aucune valeur dans le dictionnaire. Mais il semble que cela fonctionne pour la fonction pop et non avec les fonctions de chaîne.
J'ai essayé avec d'autres fonctions de liste et fonctionne de la même manière que pop. Cette liste et cette chaîne fonctionnent différemment lorsqu'elles sont utilisées comme valeurs.
my_dict={"Rank":[1,2,3],"Name":"John"}
my_dict.get("Rank").pop()
print(my_dict)
my_dict.get("Name").capitalize()
print(my_dict)
3 Réponses :
my_dict.get ("Rank") est une liste modifiable, et vous n'utilisez qu'une référence à celle-ci. Toutes les modifications que vous y apportez, y compris pop () , seront reflétées partout.
my_dict.get ("Name") est une chaîne immuable. Vous ne pouvez pas le changer, donc capitalize () renverra une nouvelle chaîne, et ne modifiera pas la chaîne existante.
Mais les dictionnaires en Python sont mutables. La valeur my_dict.get ("Name") n'est pas stockée séparément mais dans l'objet dictionnaire lui-même.
@PrashantKumarGupta oui, mais vous n'avez jamais modifié le dictionnaire nulle part. Vous faites muter l'objet list , et vous ne muterez pas l'objet str , car str code> les objets sont immuables.
Pourquoi cela ne fonctionne pas non plus my_dict = {"Rank": [1,2,3], "Name": "John", "Salary": 100.0} my_dict.get ("Rank") [1]. __add __ (1) print (my_dict)
@PrashantKumarGupta pour la même raison: les objets int sont immuables. Aucune de leurs méthodes ne fonctionne en place. En passant, vous ne devriez pratiquement jamais utiliser une méthode de double soulignement directement comme ça
C'est parce que:
list.pop - opère ( en place ) sur la liste elle-même (en supprimant le (dernier) élément) et la modifie ainsi Pour corriger votre problème, utilisez:
my_dict["Name"] = my_dict["Name"].capitalize()
caplitalize () renvoie un objet str. Si vous souhaitez mettre à jour la valeur, vous devez la renvoyer dans le dict.
my_dict["Name"] = my_dict.get("Name").capitalize()
Les objets
listsont modifiables. Certaines méthodes figurant sur les listes sont des méthodes mutantes, c'est-à-dire qu'elles fonctionnent «en place»..popest l'une de ces méthodes. Les objetsstrsont immuables. Cela signifie simplement qu'il leur manque des méthodes de mutation , donc vous savez qu'aucune de leurs méthodes ne fonctionnera "en place". Donc.capitalize ()renvoie simplement une nouvelle chaîne, qui est immédiatement supprimée (puisque vous ne l'affectez à rien)