Lorsque vous spécifiez asur le côté gauche de l' =opérateur, vous utilisez l' affectation normale de Python , qui modifie le nom adans le contexte actuel pour pointer vers la nouvelle valeur. Cela ne change pas la valeur précédente vers laquelle apointait.
En spécifiant a[0:2]sur le côté gauche de l' =opérateur, vous indiquez à Python que vous souhaitez utiliser l' affectation de tranche . L'affectation de tranche est une syntaxe spéciale pour les listes, dans laquelle vous pouvez insérer, supprimer ou remplacer le contenu d'une liste:
Insertion :
>>> a = [1, 2, 3]
>>> a[0:0] = [-3, -2, -1, 0]
>>> a
[-3, -2, -1, 0, 1, 2, 3]
Suppression :
>>> a
[-3, -2, -1, 0, 1, 2, 3]
>>> a[2:4] = []
>>> a
[-3, -2, 1, 2, 3]
Remplacement :
>>> a
[-3, -2, 1, 2, 3]
>>> a[:] = [1, 2, 3]
>>> a
[1, 2, 3]
Remarque:
La longueur de la tranche peut être différente de la longueur de la séquence attribuée, modifiant ainsi la longueur de la séquence cible, si la séquence cible le permet. - source
L'affectation de tranche fournit une fonction similaire à la décompression de tuples . Par exemple,a[0:1] = [4, 5] équivaut à:
# Tuple Unpacking
a[0], a[1] = [4, 5]
Avec Tuple Unpacking, vous pouvez modifier des listes non séquentielles:
>>> a
[4, 5, 3]
>>> a[-1], a[0] = [7, 3]
>>> a
[3, 5, 7]
Cependant, le déballage de tuple est limité au remplacement, car vous ne pouvez pas insérer ou supprimer des éléments.
Avant et après toutes ces opérations, ac'est la même liste exacte. Python fournit simplement un bon sucre syntaxique pour modifier une liste sur place.