Python évalue les expressions de gauche à droite. Remarquez que pendant d'une affectation, le côté droit est évalué avant le côté gauche. côté gauche.
Docs Python : Ordre d'évaluation
Cela signifie ce qui suit pour l'expression a,b = b,a
:
- Le côté droit
b,a
est évalué, c'est-à-dire qu'un tuple de deux éléments est créé dans la mémoire. Les deux éléments sont les objets désignés par les identifiants b
y a
qui existaient avant que l'instruction ne soit rencontrée pendant l'exécution du programme.
- Juste après la création de ce tuple, aucune affectation de cet objet tuple n'a encore été faite, mais cela n'a pas d'importance, Python sait en interne où il se trouve.
- Ensuite, le côté gauche est évalué, c'est-à-dire que le tuple est affecté au côté gauche.
- Comme le côté gauche est composé de deux identifiants, le tuple est décomposé de manière à ce que le premier identifiant
a
est assigné au premier élément du tuple (qui est l'objet qui était précédemment b avant l'échange parce qu'il avait le nom b
)
et le deuxième identifiant b
est affecté au deuxième élément du tuple (qui est l'objet qui était auparavant a avant l'échange car ses identifiants étaient a
)
Ce mécanisme a effectivement permuté les objets attribués aux identifiants a
y b
Donc, pour répondre à votre question : OUI, c'est la façon standard de permuter deux identifiants sur deux objets.
D'ailleurs, les objets ne sont pas des variables, ce sont des objets.
1 votes
@eyquem : il s'agit simplement de savoir si ordre d'évaluation est défini par le langage pour une affectation de tuple/liste. Python le fait, la plupart des langages plus anciens ne le font pas.
0 votes
Hrmm C++ a swap(a[i], a[k]) pourquoi ne pouvons-nous pas avoir quelque chose comme ça pour Python.
2 votes
@Nils Parce qu'en Python, l'affectation est une crénelage opération alors que dans l'affectation C++ à une référence est un remplacement opération. Par conséquent, en Python, vous ne pouvez pas remplacer les valeurs des arguments passés à une fonction comme en C++ (vous pouvez seulement les muter). Voir Copie et comparaison : Problèmes et solutions de Grogono et Sakkinen pour une explication de ces termes.