Referência de objetos

- 3 mins

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 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.

variável autora representado pela caixa com valor beatriz

variável autora representado pela caixa com valor beatriz

variável nome 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

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.

Desenho ilustrativo das variaveis lista_1 e lista_2

Variávies 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 variaveis lista_1 e lista_2 apontando para a mesma lista [9,8]

Desenho ilustrativos das variaveis 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 <3


Beatriz Uezu

Beatriz Uezu

Software Engineer

comments powered by Disqus
rss facebook twitter github youtube mail spotify lastfm instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora quora