### 8.4.13 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]` (resp`B[3]`) ne modifie pas `B` (resp `A`).