Python id() functie geeft de “identiteit” van het object terug. De identiteit van een object is een integer, die gegarandeerd uniek en constant is voor dit object gedurende zijn levensduur. Twee objecten met niet-overlappende levensduur kunnen dezelfde id()-waarde hebben. In de CPython-implementatie is dit het geheugenadres van het object.
Python id()
Python cached de id()-waarde van veelgebruikte gegevenstypen, zoals string, integer, tuples, enzovoort. Hierdoor kan het voorkomen dat meerdere variabelen naar hetzelfde object verwijzen en dezelfde id()-waarde hebben als hun waarden gelijk zijn. Laten we dit controleren aan de hand van een voorbeeld.
# integers
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
Let op dat de id()-waarde van ‘a’ en ‘b’ hetzelfde is, omdat ze dezelfde integerwaarde hebben. Laten we kijken of we een vergelijkbaar gedrag zien bij strings en tuples?
# 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
Uit de output blijkt dat Python de strings en tuple-objecten cached en ze gebruikt om geheugenruimte te besparen.
Caching werkt alleen met onveranderlijke objecten, merk op dat integer, string en tuples onveranderlijk zijn. Zo kan de Python-implementatie caching gebruiken om geheugenruimte te besparen en de prestaties te verbeteren.
We weten dat een woordenboek niet onveranderlijk is, laten we eens kijken of id() verschillend is voor verschillende woordenboeken, zelfs als de elementen hetzelfde zijn?
# dict
d1 = {"A": 1, "B": 2}
d2 = {"A": 1, "B": 2}
print(id(d1))
print(id(d2))
Uitvoer:
4519884624
4519884768
Zoals we dachten, geven dict-objecten verschillende id()-waarden terug en lijkt er geen caching te zijn.
Python id() voor aangepast object
Laten we een eenvoudig voorbeeld bekijken van het verkrijgen van de id()-waarde voor een aangepast object.
class Emp:
a = 0
e1 = Emp()
e2 = Emp()
print(id(e1))
print(id(e2))
Uitvoer:
4520251744
4520251856
Samenvatting
De id()-waarde van Python is gegarandeerd uniek en constant voor een object. We kunnen dit gebruiken om ervoor te zorgen dat twee objecten verwijzen naar hetzelfde object in het geheugen of niet.
Je kunt de volledige Python-script en meer Python-voorbeelden bekijken op onze GitHub Repository.
Referentie: Officiële documentatie
Source:
https://www.digitalocean.com/community/tutorials/python-id