Ciao a tutti, ---------- Messaggio inoltrato ----------
> From: Marco Beri <marcob...@gmail.com> > To: Discussioni generali sul linguaggio Python <python@lists.python.it> > Cc: > Date: Fri, 4 Jan 2013 15:01:12 +0100 > Chiaro, ha perfettamente senso una volta che ci ragioni. Ma di getto fa > specie... > Per me non ha molto senso; potreste chiarirmi il dubbio? Il fatto è che se l'operazione la faccio su un mutable tramite un'altra variabile, giustamente il risultato colpisce l'elemento referenziato del mutable originale: >>> mutable = [[2]] >>> temp = mutable[0] >>> temp += [3] >>> temp [2, 3] >>> mutable [[2, 3]] Nel caso della tupla: - a priori mi aspetto una cosa del genere: >>> immutable = [2], >>> temp = immutable[0] >>> temp += [3] Traceback (most recent call last): ... Mentre in realtà succede: >>> immutable = [2], >>> temp = immutable[0] >>> temp += [3] >>> temp [2, 3] >>> immutable ([2, 3],) - a posteriori me lo spiego con il fatto che la tupla di per sè resta immutata in quanto contiene solo il riferimento alla lista (tipo un puntatore?), mentre viene modificata la lista (forse "in place"? Così che il simil-puntatore non cambia) che non è parte integrante (i.e. non viene influenzata nell'immutabilità del contenitore). Delle due, una: o la lista viene modificata, mentre non viene modificata la tupla in sè (nel senso che le modifiche alla lista non riguardano l'immutabilità della tupla), e quindi non ci sono eccezioni; oppure viene sì sollevata l'eccezione, ma allora la mia lista resta intonsa. Invece non si verifica nessuno di questi due comportamenti. (Per quel che vale, il comportamento che avrebbe più senso, per me, è il primo) Ciao. > Marco. > Ciao! -- Nadir
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python