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)
  • alors que la somme vectorielle serait égale à (11,33,77)
Pardon donc pour le rapprochement (malheureux) que j'ai pu commettre le vendredi 21 février 2014 durant l'atelier de FX.
En Python listes et tuples ont des comportements analogues mais :
  • Les listes sont de type modifiable (en anglais mutable type):
ma_liste=[1,3,7]
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)
mon_tuple=(1,3,7)
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
En revanche vous pouvez tout de même le modifier mais avec une nouvelle affectation (ou assignation):
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