Python id()

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