Resumo rápido sobre armazenamento de dados na memória (Resposta para dúvida de fórum)
- #Python
Link para pergunta: bootcamp-iFood-forum-duvida
Essa questão de armazenamento de valores e objetos em memória é uma assunto não trivial e que depende muito da linguagem que estamos falando. Vou tentar te explicar de uma maneira bem genérica para fornecer uma base de entendimento. Dessa forma, você terá um ponto de partida se decidir ler mais sobre o assunto no futuro.
WARNING: já peço desculpas pelos desenhos feios, mas vou desenhar tudo no Paint por questão de praticidade, ok ? rsrsrs
Primeiro vamos imaginar que a memória é uma fita (como desenhada abaixo) com vários "espacinhos". Vamos dizer que eu inicializo uma variável da seguinte forma:
var1 = 12
Isso quer dizer que nós temos:
Perceba o que foi feito: eu estou dizendo que esse espacinho da memória vai ser chamado de var1 e irá armazenar o valor 12. Ao inicializar outra variável teríamos:
var2 = 63
Ou seja, eu estou dizendo que esse outro espacinho da memória vai ser chamado de var2 e irá armazenar o valor 63. Até aqui tudo bem, né ? Até agora os exemplos foram para variáveis de tipos simples/primitivos (como inteiros, floats, booleanos, etc). Pois bem, agora veja o que acontece ao inicializar a seguinte variável:
var3 = "Carro"
Mas então o que aconteceu ? Essa código 0x2a56e é um endereço. Então, eis o que houve: eu estou dizendo que esse outro espacinho da memória vai ser chamado de var3 e irá armazenar um endereço para um objeto ( a string "Carro"). Esse objeto está armazenado em outra parte da memória. Portanto, a variável var3 armazena um endereço que indica a localização do objeto na memória. Esquematizando visualmente:
Com todo esse cenário em mente, agora vamos falar sobre sua pergunta especificamente. O que seria esse caso de "mesma região de memória" ? Como nós vimos agora pouco, uma variável pode conter uma referência para um objeto. O que acontece é que as vezes duas variáveis diferentes podem armazenar o mesmo endereço para o mesmo objeto ! Mas como seria isso ? vamos supor que, junto com nossa variável var3, eu inicialize uma nova variável:
var3 = "Carro"
tipo_veiculo = "Carro"
Dessa forma, é possível que a linguagem que você está programando faça com que as variáveis var3 e tipo_veiculo armazenem o mesmo endereço para o objeto "Carro", ou não !. Por isso que eu falei no início que esse tipo de decisão varia de linguagem para linguagem. Cada linguagem possui suas "políticas" de como organizar e do que consideram como objetos ou não. Mas enfim, dado o cenário que apresentei, é possível que uma linguagem trate dessa forma:
Por sinal, acredito que Python trata esse caso dessa forma também !
Para concluir: o professor estava explicando que os operadores is e is not conseguem verificar se duas variáveis possuem o mesmo endereço (se referenciam o mesmo objeto). No exemplo que acabei de descrever, teríamos:
>>> var3 is tipo_veiculo
True
Espero ter ajudado :D
Quem quiser complementar ou quem achar que me equivoquei em alguma parte, é só falar !!
OBS: vou fazer desenhos melhores depois ! fiz esses bem rápidos só para o Alexandre não ficar sem resposta por muito tempo.