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.