Pergunta de entrevista para Desenvolvedor Python

Qual é a diferença entre uma cópia rasa e uma cópia profunda?

O que o entrevistador está avaliando, como estruturar sua resposta e um exemplo falado que você pode adaptar.

Resposta rápida

Uma cópia rasa cria um novo container externo cujos elementos são os mesmos objetos do original, então mutar uma lista aninhada aparece nos dois. Uma cópia profunda copia tudo recursivamente, te dando uma estrutura totalmente independente. Cópias profundas custam tempo e memória e podem quebrar em objetos que seguram sockets ou file handles, então use só quando o aninhamento for genuinamente compartilhado.

Por que os entrevistadores perguntam isso

O entrevistador está testando seu modelo de nomes versus objetos. Quem pensa em variáveis como caixas guardando valores vai errar isso, e essa mesma confusão gera bugs sutis em que um template de configuração é mutado por um consumidor e todos os consumidores seguintes herdam a mudança. Mencionar o custo das cópias profundas, e dunder deepcopy para controle customizado, mostra que você já tomou essa decisão sob restrições reais.

Como estruturar sua resposta

  • Contraste container novo versus conteúdo novo.
  • Dê um exemplo de mutação aninhada.
  • Diga o custo de copiar em profundidade.
  • Diga como você decide entre as duas.

Exemplo de resposta

Exemplo falado, em primeira pessoa

Rasa significa que você ganha um novo objeto externo segurando referências exatamente para os mesmos objetos internos. Fatiar uma lista de listas te dá uma lista nova, mas dar append no elemento zero muta o original também, porque as duas listas apontam para aquela mesma lista interna. A cópia profunda percorre o grafo inteiro e reconstrói cada nível, e ela rastreia os objetos que já viu para que ciclos não estourem a pilha. Meu padrão é rasa porque é barata, e eu só recorro ao deepcopy quando sei que uma estrutura aninhada vai ser mutada de forma independente. Tivemos um bug em que um dicionário de configurações padrão foi copiado só no nível de cima, e uma política de retry aninhada foi mutada por um cliente e aplicada a todos os outros clientes no worker. A outra coisa que vale dizer é que deepcopy não é grátis e nem sempre é seguro. Qualquer coisa embrulhando uma conexão de banco ou um file handle precisa de um dunder deepcopy customizado ou vai falhar, ou duplicar algo que não deveria.

Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.

Veja como funciona

Perguntas de acompanhamento que você pode esperar

  • Como o deepcopy lida com referências circulares?
  • Como você checaria se dois nomes apontam para o mesmo objeto?
  • Quando você tornaria o objeto imutável em vez disso?

Mais perguntas para Desenvolvedor Python

Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.

Prever minhas perguntas

Ensaie as perguntas difíceis antes que elas apareçam

Pratique com um copiloto ao vivo e depois entre pronto. Um Session Pass de $29 te leva até o fim da entrevista, sem assinatura e sem amarras.

Instalar o GhostPilot