S'il vous plaît considérer ce code: semble que j'ai muté le En outre, s'il s'agit d'un objet immuable, pourquoi a-t-il une méthode nomméTuple code> in-place I.e. C'est un objet mutable. Mais il est dit partout où
tuple code> s et
nomméTuple code> s sont des objets immutables. Je suis confus. P>
_replace code>? p> p>
3 Réponses :
Parce que vous ne l'avez pas attribué, remplacez cette ligne: avec: p> car il est différent . p> p>
Pourquoi avez-vous alors? em>
Il vise à renvoyer une nouvelle instance du tuple nommé remplaçant les champs spécifiés avec de nouvelles valeurs. Il ne mute pas le tuple réel lui-même. L'opération est courte vécue. P> p> tuple code> est définitivement immuable. Si vous imprimez le P1, il est identique même après
_replace code> fonction.
La méthode _replace crée une nouvelle NamedTuple, elle ne mute pas l'original, donc l'immuabilité est préservée. p>
du Docs : P >
Renvoie une nouvelle instance du tuple nommé remplaçant les champs spécifiés avec de nouvelles valeurs p> blockQuote>
Vous n'avez même pas choisi de voir si vous avez muté
p1 code>. C'est le même comportement que vous verriez avec, disons,
str.replace code>, qui ne peut également rien muter.
Méthodes qui mixtent le retour de l'objet Retour
Aucun code> par convention; Le fait que vous voyez un
point code> renvoyé à partir de l'appel de la méthode doit suggérer qu'un nouvel objet a été créé.