A função id() do Python retorna a “identidade” do objeto. A identidade de um objeto é um número inteiro, garantido como único e constante para este objeto durante sua vida útil. Dois objetos com vidas úteis que não se sobrepõem podem ter o mesmo valor id(). Na implementação CPython, isso representa o endereço do objeto na memória.
Python id()
Python armazena em cache o valor id() de tipos de dados comumente usados, como string, integer, tuples etc. Portanto, pode-se observar que várias variáveis podem se referir ao mesmo objeto e ter o mesmo valor id() se seus valores forem iguais. Vamos verificar isso com um exemplo.
# inteiros
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
Observe que o valor id() de ‘a’ e ‘b’ é o mesmo, pois têm o mesmo valor inteiro. Vamos ver se obtemos um comportamento semelhante com strings e tuplas também?
# 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
A partir do output, fica claro que o Python armazena em cache as strings e objetos de tupla e os utiliza para economizar espaço na memória.
O armazenamento em cache só funciona com objetos imutáveis; observe que inteiros, strings e tuplas são imutáveis. Portanto, a implementação do Python pode usar o armazenamento em cache para economizar espaço na memória e melhorar o desempenho.
Sabemos que o dicionário não é imutável, vamos ver se id() é diferente para diferentes dicionários mesmo se os elementos forem os mesmos?
# dict
d1 = {"A": 1, "B": 2}
d2 = {"A": 1, "B": 2}
print(id(d1))
print(id(d2))
Resultado:
4519884624
4519884768
Como pensávamos, os objetos dict estão retornando valores id() diferentes e não parece haver cache aqui.
Python id() para objeto personalizado
Vamos ver um exemplo simples de obter o valor id() para um objeto personalizado.
class Emp:
a = 0
e1 = Emp()
e2 = Emp()
print(id(e1))
print(id(e2))
Resultado:
4520251744
4520251856
Resumo
O valor id() do Python é garantido como único e constante para um objeto. Podemos usar isso para garantir se dois objetos estão se referindo ao mesmo objeto na memória ou não.
Você pode conferir o script Python completo e mais exemplos de Python em nosso Repositório GitHub.
Referência: Documentação Oficial
Source:
https://www.digitalocean.com/community/tutorials/python-id