2012-03-15 19 views

risposta

24

Alcuni motivi:

  • oggetti mutabili come liste non possono essere utilizzati come chiavi di dizionario o impostare i membri in Python, dato che non sono hashable. Se agli elenchi sono stati dati metodi __hash__ in base al loro contenuto, i valori restituiti potrebbero cambiare con la modifica del contenuto, che viola il contratto per i valori hash.
  • Se Python aveva solo sequenze mutabili, i costruttori che accettavano le sequenze spesso dovevano copiarli per garantire che le sequenze non potessero essere modificate da altro codice. I costruttori possono evitare la copia difensiva accettando solo le tuple. Ancora meglio, possono passare gli argomenti della sequenza attraverso il metodo tuple che verrà copiato solo quando necessario.
+0

I valori di hash possono cambiare? Eh? – wim

+2

wim -> gli hash vaule cambiano quando la lista cambia. La lista può cambiare se c'è un ref da qualche altra parte alla lista. L'elenco –

+0

non è disponibile. – wim

1

Perché altrimenti non ci sarebbe un tipo di sequenza immutabile! Se vuoi una tupla mutabile devi solo usare una lista.

L'utilizzo di tipi immutabili all'occorrenza presenta vari vantaggi per le prestazioni e non è possibile utilizzare facilmente un dict con chiavi tupla se sono stati resi modificabili.