Les différences entre :=, =< et copy

### 9.4.15 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).