Referência de objetos

Beatriz Uezu
3 min readDec 21, 2019

--

Já 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 atribuímos 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.

variável autora representado pela caixa com valor beatriz
variável nome representado pela caixa com valor beatriz

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.

Valor beatriz com as variáveis nome e autora representados pelo post-its

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.

Variáveis lista_1 e lista_2 possuem os mesmos valores

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])

Desenho ilustrativos das variáveis lista_1 e lista_2 apontando para a mesma lista [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 ❤

--

--