LinuxLudus: R: Python-domande varie

Andrea Adami fol@fulcro.net
Gio 22 Maggio 2008 17:18:39 CEST


> Provo a ragionarci meglio. Se avete capito il mio dubbio e avete un
> semplice esempio, scrivetemlo :)


Premettendo che non sono un esperto python parlo per similitudine con altri
linguaggi.
Le stringhe negli ultimi linguaggi sono immutabili vuol dire che se tu
esegui:
var1="Ciao"
e poi
var1="hallo"
hai allocato due oggeti stringa in memoria uno a cui hai assegnato "Ciao" e
l'altro a cui hai assegnato "hallo".
Solo l'ultimo oggetto però è referenziato da qualcosa (var1) l'altro appena
parte il garbage collector sparira' fisicamente (se si può dire così)
Quindi quando fai:
var1="ciao" 
crei un oggetto stringa gli assegni "ciao" e nomini il suo riferimento var1
quando fai var2=var1 non fai altro che assegnare lo stesso riferimento a due
nomi
quando fai var1="hallo" crei un nuovo oggeto stringa gli assegni "hallo" e
nomini il suo riferimento var1 (sovrapponendoti al riferimento che aveva
prima)
l'oggetto stringa "ciao" è acora in memoria referenziato dal nome var2
perciò
print var2 è corretto.
Non solo se assegni:
var1="hallo"
e verifichi l'uguaglianza degli oggetti con 
print (var1 is var2) (spero la sintassi sia corretta)
ottieni "True"
questo perche' python ottimizza e vedendo che c'e' una stringa uguale a
quella che volevi assegnare tu non crea un nuovo oggetto
ma da' a var1 il riferimento dell'oggetto che sta' in memoria proprio perché
sicuro che nessuno lo potrà cambiare.
In sostanza una stringa non la puoi cambiare se scrivi:
var1= "ciao"
e poi
var1 = "hallo"
non hai cambiato la stringa iniziale ne hai semplicemente creato un'altra.

Siccome tutto questo lo deduco dalla serata in cui il Rampo a spiegato
python potrei prendere dei grossi granchi.
Quindi se qualcuno conferma ...

Ciao
Andrea




Maggiori informazioni sulla lista linuxludus