Operazioni 'Tuple' vs 'List' in python

-1

Sono consentite solo due operazioni su tuple , come mostrato di seguito.

Operazioni come insert / delete a un indice non sono consentite. Ho appreso che tuple è un modello di dati immutabile.

listconsenteleoperazioniinsertedelete.Hoappresochelistèilmodellodidatimutabile.

La mia domanda:

È il fattore di mutabilità, che non consente a tuple di eseguire insert e delete operazioni?

    
posta overexchange 31.03.2015 - 00:39
fonte

2 risposte

1

Sì. Le operazioni di inserimento ed eliminazione cambiano un oggetto esistente, invece di crearne uno nuovo con un diverso insieme di elementi. Qualsiasi tipo che consente tali operazioni è chiaramente modificabile.

L'equivalente di un'operazione di inserimento / cancellazione per un tipo immutabile come una tupla sta costruendo una nuova tupla che è solo un elemento diverso dall'originale. Ad esempio, >>> tup[0:n] + (x,) + tup[n:] è un po 'come inserire x dopo l'elemento n e >>> tup[0:n-1] + tup[n+1:] è un po' come eliminare l'elemento n.

Perché ci preoccupiamo dei tipi immutabili? Perché sono meno inclini all'errore. Prendere in considerazione:

>>> x = 3
// many lines of code that don't mention x
>>> x
=> 3

Sembra ovvio che se non si assegna un nuovo valore a x, il valore di x non dovrebbe essere cambiato. Con tipi immutabili come interi e tuple, questo è garantito dal linguaggio. Puoi tranquillamente assumere che nessuna modifica diretta a x significhi che x ha lo stesso valore che ha fatto quando lo hai lasciato.

Con tipi mutabili come le tuple, non puoi mai fare quella supposizione.

>>> x = [1, 2, 3]
>>> y = x
>>> x
=> [1, 2, 3]
>>> y.insert(1, 999) // we're not using x here
>>> x
=> [1, 999, 2, 3]    // but somehow x changed anyway

Questo è solo un esempio di giocattolo. Nei programmi di grandi dimensioni in cui è possibile accedere a una variabile mutevole da centinaia o migliaia di luoghi diversi in qualsiasi ordine, è impossibile tenere traccia di chi potrebbe modificarlo o aspettarsi che altro lo modifichi in determinati momenti.

Questo si sovrappone strongmente con l'argomento più noto che le variabili globali sono malvagie. Le variabili globali immutabili sono molto meno cattive.

    
risposta data 31.03.2015 - 00:56
fonte
0

Da un punto di vista teorico, sì, l'immutabilità delle tuple è la ragione della loro mancanza di inserimento e cancellazione.

Più precisamente, è la mancanza dell'implementazione di metodi per insert ed delete che rende le tuple immutabili poiché Python usa il runtime, digitando anatra per il controllo dei tipi. Chiami un metodo su un oggetto e l'oggetto risponderà con i risultati di quel metodo o restituirà un AttributeError.

    
risposta data 31.03.2015 - 00:58
fonte

Leggi altre domande sui tag