9.4.14 Les différences entre :=, =< et copy
Attention, := et =< ne sont pas équivalents car =< modifie
lélément d’une liste ou matrice par référence.
L’affectation =< ne diffère de := que si on modifie un
élément d’une liste (ou matrice) contenue dans une variable, par exemple si
A contient la liste [0,1,2,3,4] i.e. si on a tapé
A:=[0,1,2,3,4] et que l’on
veut modifier la valeur de A[3] et changer 3 en 33, on peut
écrire dans ce cas, A[3]:=33 ou A[3] =< 33 mais ces deux
instructions sont différentes.
En effet A pointe vers une liste car A:=[0,1,2,3,4], et
A[3] =< 33 modifie cette liste en la liste [0,1,2,33,4], ainsi
toutes les variables de
Xcas qui pointent vers cette liste seront modifiées. Alors qu’avec
A[3]:=33 la liste est dupliquée, la copie est modifiée et A
pointe vers la copie. Il faut donc utiliser =< avec précautions car
tous les objets pointant sur cette liste (ou matrice)
seront modifiés.
-
On tape :
A:=[0,1,2,3,4]
B:=A
A[3]=<33
A,B
ou :
A:=[0,1,2,3,4]
B:=A
B[3]=<33
A,B
On obtient :
[0,1,2,33,4],[0,1,2,33,4]
En effet la liste [0,1,2,3,4] a été modifiée par
l’instruction A[3]=<33 (ou par B[3]=<33) en la liste
[0,1,2,33,4]. Les listes A et B
pointent sur cette liste donc A et B sont modifiées toutes les
deux.
- On tape :
A:=[0,1,2,3,4]
B:=A
A[3]:=33
A,B
On obtient :
[0,1,2,33,4],[0,1,2,3,4]
car A[3]:=33 fait une copie de la liste [0,1,2,3,4] et modifie
cette copie en [0,1,2,33,4] puis A pointe sur cette copie et cela ne modifie pas B.
On tape :
A:=[0,1,2,3,4]
B:=A
B[3]:=33
A,B
On obtient :
[0,1,2,3,4],[0,1,2,33,4]
car B[3]:=33 fait une copie de la liste [0,1,2,3,4] et modifie
cette copie en [0,1,2,33,4] puis B pointe sur cette copie et cela ne modifie pas A.
- On tape :
A:=[0,1,2,3,4]
B:=copy(A)
Puis, si on tape :
A[3]=<33
A,B
On obtient :
[0,1,2,33,4],[0,1,2,3,4]
On tape :
A:=[0,1,2,3,4]
B:=copy(A)
B[3]=<33
A,B
On obtient :
[0,1,2,3,4],[0,1,2,33,4]
En effet B pointe sur la copie de A, donc une modifiucation par
référence de A[3] (respB[3]) ne modifie pas B (resp
A).