[Python] Glitch

Nadir Sampaoli nadirsampaoli a gmail.com
Ven 4 Gen 2013 18:58:46 CET


Ciao a tutti,

---------- Messaggio inoltrato ----------

> From: Marco Beri <marcoberi at gmail.com>
> To: Discussioni generali sul linguaggio Python <python at 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.python.it/pipermail/python/attachments/20130104/f3dff847/attachment.html>


Maggiori informazioni sulla lista Python