Ciao a tutti,<br><div class="gmail_quote"><div dir="ltr"><div class="gmail_extra"><br></div><div class="gmail_extra">---------- Messaggio inoltrato ----------<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
From: Marco Beri <<a href="mailto:marcoberi@gmail.com" target="_blank">marcoberi@gmail.com</a>><br>To: Discussioni generali sul linguaggio Python <<a href="mailto:python@lists.python.it" target="_blank">python@lists.python.it</a>><br>
Cc: <br>Date: Fri, 4 Jan 2013 15:01:12 +0100<br><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">Chiaro, ha perfettamente senso una volta che ci ragioni. Ma di getto fa specie...</div></div></div></blockquote>
<div><br></div><div>Per me non ha molto senso; potreste chiarirmi il dubbio?</div><div>Il fatto è che se l'operazione la faccio su un <font face="courier new, monospace">mutable</font> tramite un'altra variabile, giustamente il risultato colpisce l'elemento referenziato del <font face="courier new, monospace">mutable</font> originale:</div>
<div><div><font face="courier new, monospace">>>> mutable = [[2]]</font></div><div><font face="courier new, monospace">>>> temp = mutable[0]</font></div><div><font face="courier new, monospace">>>> temp += [3]</font></div>
<div><font face="courier new, monospace">>>> temp</font></div><div><font face="courier new, monospace">[2, 3]</font></div><div><font face="courier new, monospace">>>> mutable</font></div><div><font face="courier new, monospace">[[2, 3]]</font></div>
<div><br></div><div>Nel caso della tupla:</div><div><br></div><div> - a priori mi aspetto una cosa del genere:</div><div><div><span style="font-family:'courier new',monospace">>>> immutable = [2],</span><br>
</div><div><div><font face="courier new, monospace">>>> temp = immutable[0]</font></div><div><div><font face="courier new, monospace">>>> temp += [3]<br></font></div><div><font face="courier new, monospace">Traceback (most recent call last):</font></div>
</div></div><div><font face="courier new, monospace">...</font></div><div><font face="courier new, monospace"><br></font></div></div><div>Mentre in realtà succede:</div><div><span style="font-family:'courier new',monospace">>>> immutable = [2],</span><br>
</div><div><div><font face="courier new, monospace">>>> temp = immutable[0]</font></div><div><div><font face="courier new, monospace">>>> temp += [3]<br></font></div><div><font face="courier new, monospace">>>> temp</font></div>
<div><font face="courier new, monospace">[2, 3]</font></div><div><font face="courier new, monospace">>>> immutable</font></div><div><font face="courier new, monospace">([2, 3],)</font></div></div></div><div> - 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).</div>
<div><br></div><div>Delle due, una:</div><div> 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;</div>
<div> oppure viene sì sollevata l'eccezione, ma allora la mia lista resta intonsa.</div><div>Invece non si verifica nessuno di questi due comportamenti.</div><div><br></div><div>(Per quel che vale, il comportamento che avrebbe più senso, per me, è il primo)<br>
</div><div><br></div></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra">
<div class="gmail_quote"><div>Ciao.</div><div>Marco.</div></div></div></div></blockquote><div><br></div><div>Ciao!</div><div><br></div><div>--</div><div>Nadir</div></div></div></div>
</div><br>