Bonjour,

Je me demande si les tranches fonctionne par référence ou par copie :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
l=[1,2,3]
a = [1, l, 3]
b = [1, l[:], 3]
l[1] = 0
a vaut [1, [1, 0, 3], 3]
b vaut [1, [1, 2, 3], 3]

Ce qui semble indiquer qu'une tranche réalise une copie.

Mais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
l=[1,2,3]
l[1:2] = [42]
Là, l vaut [1, 42, 3], ce qui semble indiquer qu'une tranche fonctionne par référence.

Alors, où le passage de référence à copie se fait-il ? Est-ce dans l'opérateur d'affectation (désolé du nom, je viens du C++ et ne connais pas la nomenclature Python sur le sujet) d'une tranche ? Si oui, la transformation fondamentale de référence à copie dans une tel opérateur n'est-elle pas une source de confusion ? Est-ce un style de programmation courant que l'on retrouve ailleurs en Python ?

Merci,