O método 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 toda a sua vida. Dois objetos com ciclos de vida não sobrepostos podem ter o mesmo valor de id(). Na implementação CPython, isso é o endereço do objeto na memória.
Python id()
O Python armazena em cache o valor de id() de tipos de dados comumente usados, como string, inteiro, tuplas, etc. Portanto, pode acontecer de várias variáveis se referirem ao mesmo objeto e terem o mesmo valor de 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))
Resultado:
4317900064
4317900064
4317900096
4317900128
Observe que o valor de 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))
Resultado:
4320130056
4320130056
4320080816
4320080816
Do resultado, 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 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 cache para economizar espaço na memória e melhorar o desempenho.
Nós sabemos que o dicionário não é imutável, vamos ver se id() é diferente para dicionários diferentes mesmo se os elementos forem iguais?
# dict
d1 = {"A": 1, "B": 2}
d2 = {"A": 1, "B": 2}
print(id(d1))
print(id(d2))
Saída:
4519884624
4519884768
Como pensamos, os objetos dict estão retornando valores diferentes de id() e não parece haver cache aqui.
id() do Python para objeto personalizado
Vamos ver um exemplo simples de obter o valor de id() para um objeto personalizado.
class Emp:
a = 0
e1 = Emp()
e2 = Emp()
print(id(e1))
print(id(e2))
Saída:
4520251744
4520251856
Resumo
O valor de 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 verificar o script Python completo e mais exemplos em Python em nosso Repositório no GitHub.
Referência: Documentação Oficial
Source:
https://www.digitalocean.com/community/tutorials/python-id