Introduzione alle Tuple in Python

In questa lezione introduttiva inizieremo lo studio delle tuple in Python. Le tuple sono una struttura dati molto simile alle liste, ma con una differenza fondamentale: una volta creata, una tupla non può essere modificata. Una tupla è quindi una sequenza ordinata immutabile.

Vedremo quali sono le caratteristiche principali delle tuple e quando conviene usarle al posto delle liste. Vedremo inoltre come crearle e come accedere agli elementi che le compongono.

Caratteristiche di una Tupla

Una tupla è una struttura dati di Python molto simile ad una lista. Il nome, a prima vista un po' esoterico, deriva dall'inglese tuple. In realtà, una traduzione più corretta sarebbe n-pla (ennupla), ossia una collezione ordinata di n elementi.

Quindi una tupla è una sequenza ordinata di elementi. In tal senso è molto simile ad una lista, ma con una differenza fondamentale: una tupla è immutabile. Questo significa che una volta creata, non è possibile modificarne il contenuto.

Definizione

Tupla

Una Tupla in Python è una Sequenza Ordinata Immutabile di elementi eterogenei.

In quanto immutabile, una tupla non può essere modificata dopo la sua creazione.

Le principali proprietà di una tupla sono:

  • Una tupla è ordinata:

    Una tupla memorizza i propri elementi in ordine in quanto è una sequenza ordinata. In questo una tupla è uguale ad una lista.

  • Si accede con un indice:

    Come una lista, una tupla è una sequenza e quindi si accede agli elementi tramite un indice. Anche in questo caso una tupla è uguale ad una lista.

  • Una tupla è immutabile:

    Una volta creata, una tupla non può essere modificata. Tuttavia è possibile creare nuove tuple a partire da tuple esistenti.

  • Una tupla può contenere elementi eterogenei:

    Una tupla può contenere elementi di tipo diverso.

  • Una tupla può contenere elementi duplicati:

    Una tupla può contenere elementi duplicati, ossia elementi che hanno lo stesso valore. Gli elementi duplicati sono considerati come elementi distinti.

  • Una tupla memorizza gli elementi per riferimento:

    Una tupla memorizza gli elementi per riferimento. Questo significa che se una tupla contiene un oggetto, essa memorizza il riferimento all'oggetto e non l'oggetto stesso. Questo è vero per tutti gli oggetti mutabili. Se una tupla contiene un oggetto immutabile, essa memorizza il valore dell'oggetto. In questo una tupla è uguale ad una lista.

Perché usare una tupla?

Anche se non ancora abbiamo visto la sintassi e le operazioni che Python mette a disposizione per lavorare con le tuple, da ciò che abbiamo visto sopra sappiamo che una tupla è identica ad una lista a parte il fatto che è immutabile.

Pertanto sorge spontanea una domanda: perché usare una tupla se si può usare una lista?

In generale, in effetti, una lista è più flessibile di una tupla. Esistono dei casi in cui il fatto che le tuple siano immutabili le rende necessarie:

  • Essendo immutabili ne deriva il fatto che esse abbiano dimensione fissa il che le rende molto efficienti in termini di accesso ai dati. Quindi le tuple sono più efficienti.
  • Le tuple possono essere utilizzate nei casi in cui è necessario garantire l'integrità dei dati. Se una tupla non può essere modificata, allora non può essere alterata in modo accidentale.
  • Vedremo nelle prossime lezioni sui dizionari che le chiavi di un dizionario devono essere immutabili. Pertanto, se si vuole utilizzare una lista come chiave di un dizionario, questa dovrà essere convertita in una tupla.

Ricapitolando:

Definizione

Quando usare una tupla

In generale, come regola empirica possiamo dire di usare sempre una lista al posto di una tupla.

Una tupla, invece, va utilizzata quando:

  • Si vuole disabilitare la modifica dei dati.
  • Si vuole ottimizzare l'accesso ai dati.
  • Si vuole usare una lista come chiave di un dizionario.

Creazione di una Tupla

Vediamo, adesso, quali sono i modi per creare una tupla in linguaggio Python. Anche nel caso delle tuple come per le liste esistono due modi.

Il primo modo è quello di usare le parentesi tonde () inserendo gli elementi da memorizzare separati da virgole.

Ad esempio, supponiamo di voler creare una tupla contenente i primi 5 numeri interi. Possiamo farlo in questo modo:

t = (1, 2, 3, 4, 5)

Il dettaglio importante da notare è che la tupla viene creata in maniera identica ad una lista. La differenza è che in questo caso abbiamo usato le parentesi tonde per evidenziare che si tratta di una lista e non di una tupla.

Come abbiamo detto, una tupla può contenere qualsiasi tipo di oggetto. Ad esempio possiamo creare una tupla che contiene stringhe:

t = ('ciao', 'come', 'va')

oppure una tupla che contiene oggetti di tipo diverso:

t = ('ciao', 1, 2.5, True)

Il secondo modo per creare una tupla è quello di usare la funzione tuple() passando come argomento un oggetto iterabile. In questo caso la funzione tuple() crea una tupla contenente gli elementi dell'oggetto iterabile. Vedremo nelle prossime lezioni il concetto di iterabile nel dettaglio. Per il momento basti sapere che si tratta di un oggetto che può essere scorso con un indice in base ad una sequenza.

Supponiamo di voler creare una tupla che contiene i primi 10 numeri interi partendo da 0. Possiamo usare la combinazione della funzione tuple applicata alla funzione range che restituisce un iterabile:

t = tuple(range(10))

In questo caso la funzione range restituisce un oggetto iterabile che contiene i numeri da 0 a 9. Se proviamo a stampare il contenuto di t otteniamo:

>>> print(t)
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

Possiamo anche creare una tupla vuota. Per farlo possiamo usare le parentesi tonde vuote ():

t = ()
Definizione

Creazione di una tupla

Per creare una tupla in Python si può usare la seguente sintassi:

t = (elemento1, elemento2, ..., elementoN)

oppure la funzione tuple passando come argomento un oggetto iterabile:

t = tuple(iterabile)

Per creare una tupla vuota basta usare le parentesi tonde vuote ():

t = ()

Bisogna, tuttavia, prestare attenzione quando si vuole creare una tupla composta da un singolo elemento. Infatti, se si scrive:

t = (1)

Python non crea una tupla ma un intero. Infatti, in questo caso, Python interpreta le parentesi tonde come un operatore di raggruppamento. Per creare una tupla con un solo elemento bisogna aggiungere una virgola dopo l'elemento:

t = (1,)
Nota

Creazione di una tupla con un solo elemento

Per creare una tupla con un solo elemento bisogna aggiungere una virgola dopo l'elemento:

t = (elemento,)

In caso di assenza della virgola, Python non crea una tupla ma un oggetto di tipo diverso. In particolare Python interpreta le parentesi tonde come un operatore di raggruppamento.

Accesso agli elementi di una Tupla

Analogamente alle liste, anche per le tuple l'accesso agli elementi avviene attraverso un indice intero. L'indice di un elemento è la sua posizione all'interno della tupla. Gli indici delle tuple partono da 0 proprio come per una lista.

La sintassi per l'accesso agli elementi di una tupla è identica al caso delle liste. Basta indicare il nome della tupla seguito da un indice racchiuso tra parentesi quadre []:

>>> t = ('ciao', 'come', 'va')
>>> print(t[1])
come

In questo caso l'indice 1 corrisponde alla posizione dell'elemento 'come' all'interno della tupla t.

Ovviamente se usiamo un indice che non esiste otteniamo un errore:

>>> print(t[3])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: tuple index out of range
Definizione

Accesso agli elementi di una tupla

Per accedere agli elementi di una tupla si usa la seguente sintassi:

tupla[indice]

Indicizzazione negativa per le Tuple

Così come per le liste anche per le tuple si può usare l'indicizzazione negativa.

Infatti, se passiamo un indice negativo gli elementi vengono considerati da destra, ossia dall'ultimo, a sinistra. Per cui, l'indice -1 indica l'ultimo elemento, l'indice -2 indica il penultimo e così via.

Supponiamo di avere la seguente tupla:

>>> t = (10, 20, 30, 40, 50)

Se vogliamo accedere all'ultimo elemento possiamo usare l'indice -1:

>>> print(t[-1])
50

Se vogliamo accedere al penultimo elemento possiamo usare l'indice -2:

>>> print(t[-2])
40

E così via.

Definizione

Indicizzazione negativa per le tuple

In Python si può accedere agli elementi di una tupla usando gli indici negativi. In questo caso gli elementi vengono considerati da destra, ossia dall'ultimo, a sinistra. Per cui, l'indice -1 indica l'ultimo elemento, l'indice -2 indica il penultimo e così via.

In Sintesi

In questa lezione introduttiva sulle tuple in Python abbiamo focalizzato la nostra attenzione sulle caratteristiche principali di questo tipo di dato. In particolare abbiamo visto che una tupla è una sequenza immutabile di oggetti che possiede le seguenti caratteristiche:

  • è ordinata, ossia gli elementi sono memorizzati in una posizione ben precisa;
  • è indicizzata, ossia gli elementi sono accessibili attraverso un indice intero;
  • è immutabile, ossia non è possibile modificare gli elementi che la compongono;
  • è composta da elementi etereogenei, ossia può contenere oggetti di tipo diverso.

Nella prossima lezione ci concentreremo sulle operazioni di base che si possono effettuare sulle tuple in Python.