Referência de objetos
- 3 minsJá aconteceu de você ter duas variáveis com os mesmos valores e alterar uma variável a outra também é alterada?
O que é variável em programação?
Variável é uma informação que será armazenada em um endereço da memória do computador, para ficar mais fácil identificar esse endereço atribuimos um nome para esse valor.
Caixas e post-its?
Para melhor entendimento podemos usar a metáfora da caixa e do post-its. Em algumas linguagens a variável representa uma caixa que vai armazenar um determinado valor, ou seja, cada caixa representado por uma variável terá um endereço na memória.
Em Python, essa metáfora não é válida. Podemos dizer que as variáveis são como post-its, as variáveis quando tiverem o mesmo valor terão a mesma referência.
Isso pode ser observado nesse código:
A função id() retorna o endereço da memória que está armazenado aquele determinado valor.
listas, tuplas, dicionários e conjuntos armazenam referências
Ao declarar listas, tuplas ou dicionários com os mesmos valores, os objetos não terão o mesmo id, ou seja a mesma referência, porém se os valores forem iguais “apontarão” para o mesmo id.
Podemos observar no código abaixo que a variável lista_1
e lista_2
possuem os ids diferentes, mas o valor de index 0 de ambas as listas possuem o mesmo id.
Podemos usar o operador ==
para comparar os valores, enquanto o is
é utilizado para comparar os ids
Caso atribuirmos o valor de lista_2
em lista_1
, eles terão o mesmo id.
Atente-se quando for manipular uma lista ou dicionário que for atribuída a uma outra variável para nāo perder os valores do objeto, pois estaremos alterando a mesma referência!
Para a alteração não afetar a variável original, podemos usar o módulo copy
com as funçōes copy()
, que retorna uma cópia rasa, e deepcopy()
, que retorna uma cópia profunda.
copy
No código abaixo estamos usando a função copy()
Notamos que ao alterar a lista interna (index 2) da variável lista_2
alterou também a variável lista_1
. Podemos dizer que tanto a lista_1
quanto a lista_2
“apontam” para a mesma lista interna ([9,8]
)
deepcopy
No deepcopy()
é feita uma cópia profunda
As variáveis não compartilham da mesma referência quando usado o deepcopy()
,logo o index 2 da variável lista_1
e da variável lista_2
são diferentes.
Espero que esse post tenha ficado simples e que você tenha entendido sobre referência de objetos!
Obrigada por ter lido <3