Site icon Tosolini.info

Python: capire le variabili

Python è un linguaggio ad oggetti ed in quanto tale utilizza le variabili in un modo leggermene diverso da altri linguaggi di programmazione, sebbene poi a livello sintattico la scrittura sia sostanzialmente uguale.

x = 20

quanto si vede qui sopra sembra totalmente identico a qualunque altro linguaggio, ma in realtà l’assegnazione di x al valore 20 indica che x è stato assegnato all’oggetto che contiene il valore 20.

Python infatti identifica qualsiasi cosa in oggetti, e questi hanno tutti una caratteristica comune, cioè essi sono composti da tre livelli “sub-atomici”, il primo è l’ID, il secondo è il tipo di oggetto, cioè un intero, una stringa o una lista ed infine il valore di quell’oggetto.

ID è molto importante perché identifica in modo automatico e univoco l’oggetto all’interno del processo. Tornando al nostro esempio di cui sopra, x è stato assegnato all’oggetto che essendo un intero ha come valore 20. Lo comprendiamo meglio proprio esaminando l’ID di questo semplice esempio:

x = 20
a = x
id(a)
4545286512
id(x)
4545286512

Qui sopra abbiamo assegnato all’oggetto di valore 20 l’etichetta “x” come variabile, successivamente l’abbiamo ri-assegnata alla variabile “a”. Utilizzando una funzione detta callables interna a Python, richiediamo l’ID dell’oggetto, e come si può notare per entrambe le variabili risulta essere il medesimo.

Questo significa che l’oggetto rimane sempre lo stesso, e quindi “a” ed “x” non detengono un valore o una copia di quel valore, ma attingono a livello di “registro” a quello specifico oggetto.

Chiaramente Python deve sapere quante volte quell’oggetto e stato assegnato e a chi, questa procedura interna si chiama “Reference Count” e vede appunto contare quante assegnazioni ha quell’oggetto. Nell’ultimo esempio che abbiamo fatto questo è di 2, poiché abbiamo assegnato il nostro oggetto a due variabili. Attraverso il comando “del” possiamo scaricare quell’oggetto e de-incrementare il conteggio.

del a

Quando questo scende a zero l’oggetto viene spostato nella “Garbage collector” cioè nel cestino dell’ambiente virtuale e da li successivamente eliminato da Python che gestisce in modo automatico la memoria affinché rimanga sempre efficiente.

E’ interessante notare che gli oggetti in Python sono literal (letterali) cioè sono riconosciuti a livello di tipologia dal sistema in modo automatico.

20
'sono una stringa'
[1, 2, 3]

Qui sopra non abbiamo assegnato nessuna etichetta, eppure Python sa che la prima è un intero, la seconda è una stringa e il terzo una lista poiché il tipo di punteggiatura utilizzata riesce a definirli anche senza dichiarazioni.

>>> type(20)
<class 'int'>
>>> type('sono una stringa')
<class 'str'>
>>> type([1, 2, 3])
<class 'list'>

Qui sopra utilizzando la funzione callable type chiediamo a Python di indicarci in modo esplicito di che tipo si tratti quell’oggetto.

Nella “vita reale” di un programma chiaramente si farà ricorso alla definizione di variabile attraverso una etichetta come succede negli altri linguaggi. Il nome di questa può essere sostanzialmente libero e nella versione 3 di Python persino utilizzare caratteri Unicode, anche se la cosa è sconsigliata. Gli unici blocchi sono che la variabile non può mai iniziare per numero e che il nome della stessa deve essere diverso dai nomi riservati, come per altro succede in qualunque altro linguaggio.

Exit mobile version