Il metodo id() di Python restituisce l'”identità” dell’oggetto. L’identità di un oggetto è un numero intero, garantito unico e costante per tutta la durata dell’oggetto. Due oggetti con cicli di vita non sovrapposti possono avere lo stesso valore id(). Nell’implementazione di CPython, questo corrisponde all’indirizzo dell’oggetto in memoria.
Python id()
Python memorizza nella cache il valore id() di tipi di dati comunemente utilizzati, come stringhe, interi, tuple, ecc. Quindi potrebbe accadere che più variabili si riferiscano allo stesso oggetto e abbiano lo stesso valore id() se i loro valori sono identici. Verifichiamolo con un esempio.
# interi
a = 10
b = 10
c = 11
d = 12
print(id(a))
print(id(b))
print(id(c))
print(id(d))
Output:
4317900064
4317900064
4317900096
4317900128
Nota che il valore id() di ‘a’ e ‘b’ è lo stesso, poiché hanno lo stesso valore intero. Vediamo se otteniamo un comportamento simile anche con stringhe e tuple.
# tuples
t = ('A', 'B')
print(id(t))
t1 = ('A', 'B')
print(id(t1))
# strings
s1 = 'ABC'
s2 = 'ABC'
print(id(s1))
print(id(s2))
Output:
4320130056
4320130056
4320080816
4320080816
Dall’output, è evidente che Python memorizza nella cache le stringhe e gli oggetti tuple e li utilizza per risparmiare spazio in memoria.
La memorizzazione nella cache può funzionare solo con oggetti immutabili; nota che gli interi, le stringhe e le tuple sono immutabili. Quindi, l’implementazione di Python può utilizzare la memorizzazione nella cache per risparmiare spazio in memoria e migliorare le prestazioni.
Sappiamo che il dizionario non è immutabile, vediamo se id() è diverso per diversi dizionari anche se gli elementi sono gli stessi?
# dict
d1 = {"A": 1, "B": 2}
d2 = {"A": 1, "B": 2}
print(id(d1))
print(id(d2))
Output:
4519884624
4519884768
Come pensavamo, gli oggetti dict restituiscono un valore id() diverso e sembra che non ci sia alcuna memorizzazione nella cache.
Id di Python() per oggetto personalizzato
Vediamo un semplice esempio di ottenere il valore id() per un oggetto personalizzato.
class Emp:
a = 0
e1 = Emp()
e2 = Emp()
print(id(e1))
print(id(e2))
Output:
4520251744
4520251856
Riepilogo
Il valore id() di Python è garantito essere unico e costante per un oggetto. Possiamo utilizzarlo per assicurarci che due oggetti si riferiscano allo stesso oggetto in memoria o meno.
Puoi controllare lo script Python completo e altri esempi Python dal nostro Repository GitHub.
Riferimento: Documentazione Ufficiale
Source:
https://www.digitalocean.com/community/tutorials/python-id