Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Se Recibo 3 passa a referenciar Recibo 2 na ultima linha, ele não subscrito?

Dei uma lida no dúvida nos posts anteriores mas ainda fiquei com essa dúvida. Se Recibo 3 passa a referenciar Recibo 2 na ultima linha, ele não subscreve a referencia ao none?

5 respostas

Fala Edson. Até onde eu entendi, o funcionamento das variáveis são similar ao C ( linguagem de programação C), na qual tem um ponteiro (vetor) apontando para o valor. No caso de vc fazer varA = Var2, passará a existir um ponteiro na memória referenciando o item Var2, ou seja, é como se tivesse uma "flecha" apontando para o endereço de memória de Var2 no Var1. Se fizesse um print de Var1 e ele buscasse o valor de Var1 no endereço de memória de Var2. No caso de variáveis, parece que se subscrever um valor, o outro assume o valor que estava no outro endereço, por padrão. Não sei se ficou claro...

recibo1 = Recibo(50) --> endereço de memória de recebo1 receberá o valor 50 
recibo2 = Recibo(100) --> endereço de memória de recebo2 receberá o valor 100 
recibo3 = Recibo(200) --> endereço de memória de recebo3 receberá o valor 50
recibo4 = recibo3 --> endereço de memória de recebo4 apontará para o valor de recibo3
recibo3 = None --> endereço de memória de recebo3 receberá o valor None, sem afetar o endereço de memória de recibo4
recibo1 = recibo3 --> substitui 50 por None, que está em recibo3
recibo4 = recibo1 --> recibo 4 receberá None que está armazenado em Recibo1
recibo3 = recibo2 --> receberá o valor de 100 que está armazenado em recibo2

# como virou uma salada no texto aberto vou por aqui:

eu fiz o teste no python console assim: 
recibo1 = 50 
recibo2 = 100 
recibo3 = 200
hex(id(recibo3)) # no meu computador deu '0x1a430306290'
recibo4 = recibo3 
hex(id(recibo4)) # no meu computador deu '0x1a430306290'
recibo3 = None 
hex(id(recibo3)) # no meu computador deu '0x7ffb13883cd8'
print(recibo3)  # None
print(recibo4)  #200

Note que quando você iguala uma a outra, ambas passam a ter o mesmo endereço de memória, ou seja, tem um ponteiro de uma variável para o endereço de memória da outra.

Enquanto vai fazendo as trocas dos valores, experimente ir fazendo o hex(id(recibox)) e veja como vai se comportando.

em suma: se os endereços de memória são iguais, tem um ponteirinho na história.

Fala José, obrigado cara! verifica se entendi sua explicação, por gentileza. Segui essa mesma lógica da sua explicação onde ao final

recibo3 = recibo2 --> receberá o valor de 100 que está armazenado em recibo2

então, o indicado acima é apenas uma "flecha" de indicação de endereço, sendo que o valor de recibo 3 vai ser sempre "none". Esse é o entendimento ou recibo 3 vai ser = "none" por uma questão comportamental da variável?

Fala Edson. eu atualizei acima para ficar melhor de ler a explicação. Recibo3 = receberá 200, logo o recibo3 não será sempre None. O teste acima eu fiz no console do Pycharm mesmo.

o hex(id()) te retorna o endereço de memória onde está armazenado um determinado item ou valor. Não sei se ficou mais clara a explicação, mas tente fazer você a montagem das variáveis e dando o print(recibox) e o hex(id()) para vc ir acompanhando as modificações que vão acontecendo.

O endereçamento de memória é, certamente, um tópico mais avançado, mas só dessa forma que consegui tirar a dúvida =}.

Quando cheguei nesse exercício eu me embananei todo também heheheh.

solução!

Obrigado José, tmj!

de nada. estamos todos aprendendo =} todos os dias

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software