0
votes

Pourquoi la fonction pop () modifie-t-elle une valeur de liste de dictionnaire mais capitalize () ne peut pas changer la casse d'une valeur de chaîne?

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)


1 commentaires

Les objets list sont modifiables. Certaines méthodes figurant sur les listes sont des méthodes mutantes, c'est-à-dire qu'elles fonctionnent «en place». .pop est l'une de ces méthodes. Les objets str sont 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)


3 Réponses :


1
votes

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.


4 commentaires

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 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



0
votes

C'est parce que:

Pour corriger votre problème, utilisez:

my_dict["Name"] = my_dict["Name"].capitalize()


0 commentaires

0
votes

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()


0 commentaires