Rectificatif de Rene Paul Mages à propos des tuples
En Python la somme de ces deux tuples : (1,3,7)+(10,30,70) est égale à (1,3,7,10,30,70)
En Python listes et tuples ont des comportements analogues mais :
print ma_liste # le résultat est [1,3,7]
print id(ma_liste) # le résultat est l'adresse en mémoire de ma_liste (on parle de référence)
ma_liste[0]=11
print ma_liste # le résultat est [11,3,7]
print ma_liste[1:] # le résultat est [3,7]
l'objet ma_liste a été modifié mais vous pourrez vérifier que sa référence est inchangée avec un print id(ma_liste)
print mon_tuple # le résultat est (1,3,7)
print id(mon_tuple) # le résultat est l'adresse en mémoire de mon_tuple (on parle de référence)
print mon_tuple[1:] # le résultat est (3,7)
l'objet mon_tuple n'est pas modifiable il est donc impossible de proceder à cette affectation:
mon_tuple=(11,3,7)
Vous pourrez vérifier avec la fonction id( ) que ce n'est plus le même objet (puisque sa référence a changé)
Avantage des tuples sur les listes : l'accès est plus rapide et comme ils ne sont pas mutables il est possible de les utiliser comme clés dans les dictionnaires
Avantage des listes sur les tuples : elles sont mutables (mais on ne peut les utiliser comme clés dans les dictionnaires)
Nota Bene : deux fonctions de conversion tuple( ) et list( ) permettent si besoin de transformer :
Quelques liens
En Python la somme de ces deux tuples : (1,3,7)+(10,30,70) est égale à (1,3,7,10,30,70)
- alors que la somme vectorielle serait égale à (11,33,77)
En Python listes et tuples ont des comportements analogues mais :
- Les listes sont de type modifiable (en anglais mutable type):
print ma_liste # le résultat est [1,3,7]
print id(ma_liste) # le résultat est l'adresse en mémoire de ma_liste (on parle de référence)
ma_liste[0]=11
print ma_liste # le résultat est [11,3,7]
print ma_liste[1:] # le résultat est [3,7]
l'objet ma_liste a été modifié mais vous pourrez vérifier que sa référence est inchangée avec un print id(ma_liste)
- alors que les tuples ne le sont pas (en anglais immutable type)
print mon_tuple # le résultat est (1,3,7)
print id(mon_tuple) # le résultat est l'adresse en mémoire de mon_tuple (on parle de référence)
print mon_tuple[1:] # le résultat est (3,7)
l'objet mon_tuple n'est pas modifiable il est donc impossible de proceder à cette affectation:
- mon_tuple[0]=11 # alors que cela est possible sur une liste
mon_tuple=(11,3,7)
Vous pourrez vérifier avec la fonction id( ) que ce n'est plus le même objet (puisque sa référence a changé)
Avantage des tuples sur les listes : l'accès est plus rapide et comme ils ne sont pas mutables il est possible de les utiliser comme clés dans les dictionnaires
Avantage des listes sur les tuples : elles sont mutables (mais on ne peut les utiliser comme clés dans les dictionnaires)
Nota Bene : deux fonctions de conversion tuple( ) et list( ) permettent si besoin de transformer :
- soit une liste en tuple : tuple(ma_liste)
- soit un tuple en liste : list(mon_tuple)
Quelques liens
- https://en.wikipedia.org/wiki/Immutable_object
- http://docs.python.org/release/1.5.1p1/tut/tuples.html
- http://docs.python.org/2/reference/datamodel.html
- http://sametmax.com/id-none-et-bidouilleries-memoire-en-python/
- http://sametmax.com/valeurs-et-references-en-python/
- http://perso.limsi.fr/pointal/_media/python:cours:courspython3.pdf (voir les pages 25 et 26)