Menu

Tuple in Python: sequenze immutabili, spacchettamento e named tuple

Quando usare una tupla invece di una lista: immutabilità, spacchettamento, named tuple e le situazioni per cui le tuple sono fatte.

Questa pagina include editor eseguibili: modifica, esegui e vedi subito l'output.

Una tupla è una lista che non puoi modificare

A prima vista tuple e liste si somigliano: entrambe sono sequenze ordinate, entrambe supportano indicizzazione e iterazione. Ma una differenza cruciale cambia tutto: le tuple sono immutabili. Una volta creata una tupla, non puoi aggiungerci elementi, toglierne o sostituirne uno.

Le tuple si scrivono con le parentesi tonde (o a volte senza):

Una tupla con un solo elemento ha bisogno di una virgola finale, altrimenti Python tratta le parentesi come un semplice raggruppamento:

E per le tuple vuote, usa ():

L'immutabilità, in pratica

Prova a modificare una tupla e Python ti ferma:

Puoi leggere liberamente da una tupla (indicizzazione, slicing, iterazione, in), ma non puoi modificarla. Se ti serve una tupla diversa, ne crei una nuova.

Perché dovresti volere qualcosa che non puoi cambiare?

L'immutabilità sembra un limite, ma spesso è proprio la caratteristica che ti serve.

  1. Sicurezza. Una tupla che passi a una funzione non può essere modificata alle tue spalle.
  2. Hashability. Le tuple di valori immutabili si possono usare come chiavi di dizionario o membri di un set; le liste no.
  3. Intenzione. Una tupla dice "questo è un record dalla forma fissa". point = (3, 4) comunica "due coordinate" in modo più chiaro di point = [3, 4].

Le tuple danno il meglio per cose come:

  • Coordinate: (x, y), (lat, lon)
  • Colori RGB: (255, 128, 0)
  • Record: (name, email, signup_date)
  • Restituire più valori da una funzione

Spacchettamento

Tuple e sintassi di spacchettamento sono fatte l'una per l'altra:

È la virgola a sinistra a fare lo spacchettamento. Python vede due nomi e una tupla con due valori, e li associa a coppie.

Nel Python idiomatico questo schema è ovunque:

Puoi usare * per raccogliere "tutto il resto":

Comodo quando ti interessano solo il primo e l'ultimo elemento.

Tuple come chiavi di dizionario

Siccome le tuple sono hashable (purché lo sia anche il loro contenuto), puoi usarle come chiavi di un dict. Le liste non possono farlo:

Questo schema, cioè usare come chiave una combinazione di valori, è sorprendentemente utile. Pensa a "il punteggio dell'utente X nel giorno Y" o "il percorso migliore da A a B".

Tuple per restituire più valori

Una funzione che deve restituire più di una cosa di solito restituisce una tupla:

La funzione integrata divmod() di Python fa esattamente questo. L'assegnazione con spacchettamento nel codice chiamante la rende naturale da leggere.

Named tuple, quando la posizione non basta

Quando le tue tuple superano i due o tre elementi, ricordare quale posizione significa cosa diventa noioso. collections.namedtuple risolve il problema:

Ora gli elementi della tupla hanno un nome. È ancora immutabile, è ancora una tupla (quindi spacchettamento e indicizzazione funzionano), ma l'accesso è molto più comodo. Per qualsiasi cosa più complessa ci sono le dataclasses, che incontreremo più avanti nel capitolo sulle classi.

Tupla o lista: una guida rapida alla scelta

  • Forma fissa, ogni posizione ha un significato → tupla.
  • Una collezione che potrebbe crescere o ridursi → lista.
  • Restituire più valori da una funzione → tupla.
  • Ti serve una chiave di dict o un membro di un set → tupla (la lista non funziona).
  • La modificherai → lista (la tupla non te lo permette).

Andiamo avanti

Le tuple coprono un estremo dello spettro: fisse, piccole, strutturate. Prossimo argomento: i set, che svolgono un compito completamente diverso, cioè controlli di appartenenza veloci e unicità.

Domande frequenti

Cos'è una tupla in Python?

Una tupla è una sequenza ordinata e immutabile: come una lista, ma una volta creata non puoi aggiungere, rimuovere o modificare i suoi elementi. Le tuple si scrivono con le parentesi tonde: point = (3, 4).

Che differenza c'è tra una tupla e una lista?

Entrambe sono sequenze ordinate. Le liste sono mutabili, cioè puoi modificarle dopo averle create, mentre le tuple sono immutabili. Le tuple si usano di solito per piccole raccolte di valori che formano insieme un unico "record", come delle coordinate o i valori multipli restituiti da una funzione.

Quando dovrei usare una tupla?

Usa una tupla quando hai un record di dimensione fissa in cui ogni posizione ha un significato: coordinate, colori RGB, una riga di database. Usa le tuple anche come chiavi di dizionario o membri di un set, perché le liste lì non si possono usare. Per tutto il resto, quando la collezione potrebbe crescere o ridursi, la scelta predefinita è la lista.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA