[Python] Il dilemma degli array mutabili

Piergiuliano Bossi pgbossi a gmail.com
Mer 18 Set 2013 15:05:59 CEST


Un'altra cosa che mi spiazza e' la seguente: sono abituato a manipolare e
trasformare array immutabili, in cui ogni trasformazione ti ritorna una
copia dell'array di partenza, per cui ci puoi fare le piu' immani schifezze
senza effetti collaterali.

In Python le liste sono mutabili e c'e' ben poco che si possa fare senza
mutarle manipolandole, per cui in un metodo che riceve una lista in
ingresso mi sono trovato spesso a copiarle in una variabile locale prima di
lavorarci sopra:
    import copy
    def yada(foo):
        bar = copy.copy(foo)
        # ecc.

Usare un array.array non cambia le cose di fatto, introducendo tutta
un'altra categoria di limitazioni. Le tuple sono immutabili, ma non
funzionano nel senso che ho spiegato sopra (si', lo so, per la append
potrei creare una nuova tupla e passarle in ingresso una lista concatenata
della vecchia tupla e del nuovo elemento, ma non mi sembra il modo in cui
il BDFL le ha intese).

Per cui la mia domanda e', quando volete manipolare strutture tipo array
senza mutarle o mutandole in copia:
1) le copiate all'inizio come dicevo sopra
2) non usate liste, ma tuple, ma poi come compensate la mancanza di append
e remove (sembra una contraddizione in termini ma non lo e', basterebbe che
append e remove ritornino nuove strutture dati, copie dell'originale)
3) vi toccate (cit)

Ho come la sensazione che Marco dira': usa una comprehension, che non e'
una cattiva idea, ci mancherebbe, ma le comprehension mal si prestano
quando l'algoritmo che stai implementando e' modellato su append() e
remove() o sbaglio?

Grazie e ciao
Giuliano


-- 
Piergiuliano Bossi
Blog: http://thinkingbox.wordpress.com/
Twitter: http://twitter.com/thinkingbox (English)
Twitter: http://twitter.com/scatolapensante (Italiano)
Google+: https://plus.google.com/u/0/108187981162465525118
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20130918/662957ba/attachment.html>


Maggiori informazioni sulla lista Python