Question d'entretien pour Développeur Python

Quelle est la différence entre une copie de surface et une copie profonde ?

Ce que le recruteur cherche à évaluer, comment structurer votre réponse et un exemple parlé à adapter.

Réponse rapide

Une copie de surface crée un nouveau conteneur extérieur dont les éléments sont les mêmes objets que l'original, donc muter une liste imbriquée se voit dans les deux. Une copie profonde recopie tout récursivement et vous donne une structure totalement indépendante. Les copies profondes coûtent du temps et de la mémoire et peuvent casser sur des objets qui tiennent des sockets ou des descripteurs de fichiers, donc ne les utilisez que quand l'imbrication est réellement partagée.

Pourquoi les recruteurs posent cette question

Le recruteur teste votre modèle des noms par rapport aux objets. Quiconque se représente les variables comme des boîtes contenant des valeurs se trompera, et cette même confusion produit des bugs subtils où un modèle de configuration est muté par un consommateur et où tous les suivants héritent du changement. Mentionner le coût des copies profondes, et dunder deepcopy pour en garder le contrôle, montre que vous avez tranché la question sous contrainte réelle.

Comment structurer votre réponse

  • Opposez nouveau conteneur et nouveau contenu.
  • Donnez un exemple de mutation imbriquée.
  • Indiquez le coût de la copie profonde.
  • Dites comment vous choisissez entre les deux.

Exemple de réponse

Exemple parlé, à la première personne

Surface veut dire que vous obtenez un nouvel objet extérieur qui contient des références vers exactement les mêmes objets intérieurs. Trancher une liste de listes vous donne une liste neuve, mais ajouter un élément à l'élément zéro mute aussi l'original, parce que les deux listes pointent sur cette même liste intérieure. La copie profonde parcourt tout le graphe et reconstruit chaque niveau, et elle garde trace des objets déjà vus pour que les cycles ne fassent pas exploser la pile. Je pars sur la copie de surface parce qu'elle est bon marché, et je ne sors deepcopy que quand je sais qu'une structure imbriquée va être mutée indépendamment. Nous avons eu un bug où un dictionnaire de réglages par défaut n'était copié qu'au niveau supérieur, et une politique de retry imbriquée a été mutée par un client puis appliquée à tous les autres clients du worker. L'autre chose à dire, c'est que deepcopy n'est ni gratuit ni toujours sûr. Tout ce qui enveloppe une connexion de base de données ou un descripteur de fichier a besoin d'un dunder deepcopy sur mesure, sinon cela échouera, ou dupliquera quelque chose qui ne devrait pas l'être.

Vous passez cet entretien bientôt ? GhostPilot écoute votre appel en direct, repère la question dès qu'elle est posée et affiche une réponse structurée à l'écran en temps réel. Essayez-le lors de votre prochain entretien blanc, ou prenez un Session Pass à $29, sans abonnement, pour le jour J.

Voir comment ça marche

Questions de relance à prévoir

  • Comment deepcopy gère-t-il les références circulaires ?
  • Comment vérifieriez-vous que deux noms pointent sur le même objet ?
  • Quand rendriez-vous plutôt l'objet immuable ?

Autres questions pour Développeur Python

Votre recruteur posera sa propre version de celle-ci. Collez votre véritable fiche de poste dans le Question Predictor gratuit et obtenez les 20 questions que ce poste a le plus de chances de poser, avec ce que chacune cherche vraiment à sonder.

Prédire mes questions

Répétez les questions difficiles avant qu'on vous les pose

Entraînez-vous avec un copilote en direct, puis présentez-vous prêt. Un Session Pass à $29 vous accompagne pendant l'entretien, sans abonnement et sans engagement.

Obtenir GhostPilot