Python id()

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