Tranches : Référence ou copie ?
Bonjour,
Je me demande si les tranches fonctionne par référence ou par copie :
Code:
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:
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,