Quand on affecte un tableau à une variable genre t1 = [1,2]; la variable contient une RÉFÉRENCE à l'objet tableau. Et t2=t1 copie cette même référence dans t2.
Le même tableau est donc accessible via les deux variables. si on modifie t1[0] ça modifie le contenu du tableau donc t2[0].
EDIT par contre si on modifiait t1 par t1 = [3, 4], t1 ferait référence à ce nouvel objet tableau.
Et les nombres pourquoi c'est pas pareil ? Et bien si, c'est pareil. Si on fait a=1, a contient une RÉFÉRENCE à la constante 1. Avec b=a, b se réfère à la même constante. Et après b=2, b se réfère à une AUTRE constante. Ça ne modifie pas la constante 1.
- Edité par michelbillaud 2 janvier 2024 à 18:06:41
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Merci! Je comprend mieux. A contrario, si au lieu d'une liste, tu mets un entier dans deux variables, elles sont indépendantes...
C'est le vocabulaire que vous utilisez qui ne va pas.
Si j'écris:
>>> A = B = 20
le même objet entier avec la valeur 20 a été assigné à A et à B.
Si j'écris:
>>> A = B = [1, 2, 3]
j'ai aussi assigné le même objet à A et à B.
Là où ça se complique, c'est lorsqu'on cherche à modifier l'objet. On sait modifier une liste mais côté entier on ne sait pas modifier 20 en 21 sans assigner l'objet 21 à A (ou à B).
Ecrire Z = R + [], c'est assigner à Z une nouvelle liste fabriquée en concaténant R et [].
Il y a donc 2 concepts: assigner un objet à une variable, (pouvoir) modifier l'objet associé à.
Pour assigner à Z une copie de R, on pourra écrire: Z = list(R) ou Z = R[:] ou Z = R.copy(). Et on aura un autre problème intéressant lorsque R sera liste de listes (et non plus liste d'entiers).
Cette œuvre d'art vous est offerte gratuitement pour la nouvelle année
C'est aussi le cas (shallow copy) de la méthode copy.copy. Pour une copy en profondeur, c'est copy.deepcopy(), comme son nom l'indique, qui copie les objets (les tableaux, les dictionnaires etc) récursivement. Voir https://docs.python.org/3/library/copy.html
- Edité par michelbillaud 2 janvier 2024 à 18:54:57
J'essaie de comprendre
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)