-1
votes

Si un NamedTuple est immuable, pourquoi a-t-il une méthode _replace?

S'il vous plaît considérer ce code: xxx

semble que j'ai muté le nomméTuple in-place I.e. C'est un objet mutable. Mais il est dit partout où tuple s et nomméTuple s sont des objets immutables. Je suis confus.

En outre, s'il s'agit d'un objet immuable, pourquoi a-t-il une méthode _replace ?


2 commentaires

Vous n'avez même pas choisi de voir si vous avez muté p1 . C'est le même comportement que vous verriez avec, disons, str.replace , qui ne peut également rien muter.


Méthodes qui mixtent le retour de l'objet Retour Aucun par convention; Le fait que vous voyez un point renvoyé à partir de l'appel de la méthode doit suggérer qu'un nouvel objet a été créé.


3 Réponses :


1
votes

Parce que vous ne l'avez pas attribué, remplacez cette ligne: xxx

avec: xxx

car il est différent .


0 commentaires

3
votes

tuple est définitivement immuable. Si vous imprimez le P1, il est identique même après _replace fonction. xxx

Pourquoi avez-vous alors? 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.


0 commentaires

1
votes

La méthode _replace crée une nouvelle NamedTuple, elle ne mute pas l'original, donc l'immuabilité est préservée.

du Docs :

Renvoie une nouvelle instance du tuple nommé remplaçant les champs spécifiés avec de nouvelles valeurs


0 commentaires