Alternativa E - conta1 e conta2 apontarão para o mesmo objeto na memória
Introdução
Em Python, a atribuição de objetos funciona de maneira diferente da atribuição de tipos primitivos (como números inteiros simples) em outras linguagens. É fundamental compreender como a linguagem gerencia a memória para evitar erros lógicos comuns.
Desenvolvimento
Quando utilizamos o operador de atribuição =, o Python não copia os dados do objeto. Ele simplesmente cria um novo "rótulo" (nome de variável) que aponta para o mesmo endereço de memória onde o objeto já existe.
Conceito de Referência
Imagine que um objeto é uma caixa em um armário e a variável é um post-it colado na porta desse armário.
conta1 = Conta(): Criamos uma caixa e colocamos o post-it "conta1" nela.conta2 = Conta(): Criamos outra caixa e colocamos o post-it "conta2" nela.conta1 = conta2: Pegamos o post-it "conta1" e o movemos para a caixa que já tinha o post-it "conta2". Agora, dois post-its (nomes) indicam a mesma caixa.
Por que a alternativa B está incorreta?
Embora pareça intuitivo pensar que "copiou", dizer que "conta2 foi copiado para conta1" sugere que agora temos duas contas independentes com os mesmos valores. Na realidade, se você alterar um atributo de conta1 (ex: conta1.saldo = 0), essa alteração afetará imediatamente o que conta2 acessará, pois eles são o mesmo objeto físico na memória RAM.
| Comportamento | Descrição |
|---|
Atribuição Simples (=) | Compartilhamento de referência (mesmo objeto) |
Cópia Profunda (copy.deepcopy) | Criação de um novo objeto independente |
Conclusão
A instrução conta1 = conta2 faz com que a variável conta1 deixe de apontar para seu objeto original e passe a apontar exatamente para o objeto que conta2 já apontava. Portanto, ambas as variáveis referenciam o mesmo bloco de memória.
Resposta Correta: Alternativa E