Représentation mémoire
Skander Zannad et Judicaël Courant
2014-10-07
1 Modèle mémoire
Représentation des données en mémoire :
Relativement complexe.
Mais on peut travailler sur un modèle relativement simple.
Notre modèle :
Python manipule des données qu’on appelle des objets.
Un objet est une suite de cases mémoires contiguës contenant
1. Le type de l’objet.
2. Des données propres à l’objet.
3. Des liens vers d’autres objets (adresses des autres objets).
1
Exemple :
[1 , 2 , s o l e i l , [42 , 17]]
int
2
str
soleil
list
32462152
32460760
int
42
int
17
list
32461144
32461120
47162137342672
47162137217576
int
1
2 Variables globales
Quand on définit des variables (globales),
celles-ci sont stockées dans une table appe-
lée dictionnaire associant à chaque nom de
variable sa valeur :
a= 123
b= 1789
t= [ h e l l o , world ]
dict
47162136380880
32464192
47162136380920
32739896
47162136379840
47162137268952
str
a
int
123
str
b
int
1789
str
t
list
47162137342720
47162137342768
str
world
str
hello
3 Affectation
Modifions a:
a=b
Que s’est-il passé ?
1.
On a évalué l’expression
b
. Le résul-
tat est une adresse mémoire, celle de
l’entier 1789.
2. Ce résultat est mis dans a.
str
t
str
hello
str
b
dict
47162136380880
32739896
47162136380920
32739896
47162136379840
47162137268952
str
a
int
1789
list
47162137342720
47162137342768
str
world
2
4 Expressions
a=b+ 1
Pour évaluer
1789 + 1
, Python construit un
nouvel objet, y met le résultat et retourne
son adresse. L’évaluation d’une expression
peut créer de nouveaux objets.
dict
47162136380880
32582232
47162136380920
32739896
47162136379840
47162137268952
str
a
int
1790
str
b
int
1789
str
t
list
47162137342720
47162137342768
str
world
str
hello
Remarque : Python n’est pas très malin
a=b+ 0
Python a construit un nouvel objet pour
évaluer 1789 + 0...
str
t
str
hello
str
b
dict
47162136380880
32739536
47162136380920
32739896
47162136379840
47162137268952
str
a
int
1789
int
1789
list
47162137342720
47162137342768
str
world
5 Aliasing
Deux variables peuvent représenter le
même objet :
t= [9283 , 1009]
u=t
On parlera d’égalité physique pour dire que
deux objets ont la même adresse mémoire.
En python, elle peut se tester avec le mot-
clé is tis u» vaut ici True).
dict
47162136383280
47162137247256
47162136379840
47162137247256
str
u
list
32739848
32739824
str
t
int
9283
int
1009
Cela peut avoir des conséquences inat-
tendues :
t[0] = 42
# u [0] v aut maintenant 4 2 . . .
3
str
t
str
u
dict
47162136383280
47162137247256
47162136379840
47162137247256
list
32462152
32739824
int
1009
int
42
Attention : deux objets peuvent avoir le
même contenu mais ne pas être physique-
ment égaux.
t= [9283 , 1009]
u= [9283 , 1009]
On parlera d’égalité structurelle. En python,
elle se teste avec le symbole «
==
» («
t== u
»
vaut ici
True
alors que «
tis u
» vaut
False
)
dict
47162136383280
47162137269960
47162136379840
47162137268952
str
u
list
32739848
32739824
str
t
list
32739848
32739824
int
9283
int
1009
6 Copier une liste
Le slicing (tranchage) se fait par copie.
C’est un moyen simple de copier une liste
dans une autre :
t= [9283 , 1009]
u=t[:]
str
t
str
u
dict
47162136383280
47162137268952
47162136379840
47162137247256
list
32739848
32739824
list
32739848
32739824
int
9283
int
1009
7 Un problème d’aliasing
# m a t r i c e n u l l e 43
A= [[0]3]4
list
47162137246104
47162137246104
47162137246104
47162137246104
list
32461168
32461168
32461168
int
0
A[0 ] [ 2] = 42
list
47162137246104
47162137246104
47162137246104
47162137246104
list
32461168
32461168
32462152
int
0
int
42
4
Pour construire
A
correctement, on crée
une liste de 4objets bidons :
A= [ None ]4
list
9653152
9653152
9653152
9653152
None
Puis on remplace chacun par une nou-
velle rangée de 0.
fo r iin range ( 4 ) :
A[i] = [0]3
list
32461168
32461168
32461168
int
0
list
32461168
32461168
32461168
list
32461168
32461168
32461168
list
47162137246104
47162137269960
47162137299280
47162137299568
list
32461168
32461168
32461168
5
1 / 9 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !