TP2–Structures de donn´
ees et it´
eration
1.4 Tranchage (slicing)
On peut découper une liste en «tranches» (opération connue sous le nom de «slicing» en anglais) :
Par exemple, pour obtenir les éléments de rangs 2 à 4 de la liste précédente :
>>> l[2:4]
[7, ’ soleil ’]
Attention : ne pas oublier qu’en python, les intervalles d’entiers sont fermés à gauche et ouverts à droite. Quand
on demande les éléments de rangs compris entre 2 et 4, on obtient donc les éléments de rangs appartenant à ~2,4~.
On peut également remplacer une tranche d’une liste :
>>> l
[1, 2, 3, ’ soleil ’]
>>> l[1:3] = [ ’ Bonjour ’,’ H e l l o ’ ,’ Guten Tag ’ ,’ Buongiorno ’]
>>> l
[1, ’ Bonjour ’,’ H e l l o ’ ,’ Guten Tag ’ ,’ Buongiorno ’,’ soleil ’]
De manière générale, la syntaxe des tranches est l[start:stop:step] où start désigne l’indice où commencer,
stop l’indice avant lequel il faut s’arrêter et step l’incrément à donner à l’indice à chaque étape. On peut omettre
ces valeurs start,stop,step, auquel cas python leur donne respectivement les valeurs 0, len(l) et 1. Ainsi
l[1::2] désigne les éléments de lde rang impair et l[::2] ceux de rang pair.
1.5 Aliasing
De manière générale, un objet python est représentée en machine par une suite d’octets dans la mémoire vive.
Lorsqu’on veut faire référence à un objet on le fait par son adresse en mémoire.
On peut obtenir l’adresse en mémoire d’un objet avec la fonction id
>>> a = [11 , 22, 33]
>>> id(a)
3072380108
(NB : l’adresse en question dépend de beaucoup de facteurs, vous n’obtiendrez pas la même que ci-dessus)
Dire qu’on met un objet dans une variable est un abus de langage : une variable python ne contient pas le moindre
objet mais seulement l’adresse d’un objet (on dit que la variable pointe vers l’objet 2).
Lorsqu’on copie le contenu d’une variable dans une autre, python se contente en fait de copier cette adresse :
>>> b = a
>>> id(b)
3072380108
Cela aura deux conséquences :
1. La copie du contenu d’une variable dans une autre se fait en temps constant (indépendant de la taille de l’objet
vers lequel elle pointe). C’est en particulier le cas lorsqu’on appelle une fonction : mettre un argument réel
de la fonction dans la variable jouant le rôle de paramètre formel se fait en temps constant.
2. Après la copie du contenu d’une variable dans une autre, les deux variables pointent vers le même objet.
Toute modification de l’un sera visible de l’autre, pour le meilleur et pour le pire. On dit que les deux
variables sont alias l’une de l’autre.
>>> a[0] = 44
>>> a
[44, 22, 33]
>>> b
[44, 22, 33]
Exercice 1
Comprendre la différence entre :
>>> a = [11 , 22, 33]
>>> b = a
>>> a[0:3] = [17 , 42, 561]
et
2. Je suspecte qu’il s’agit d’un anglicisme : to point at/to.
Lyc´
ee du Parc – Lyc´
ee LaMartini`
ere Monplaisir – Formation Python 2