Una copia superficial crea un contenedor exterior nuevo cuyos elementos son los mismos objetos que los del original, así que mutar una lista anidada se ve en las dos. Una copia profunda copia todo de forma recursiva y te da una estructura completamente independiente. Las copias profundas cuestan tiempo y memoria y pueden romperse con objetos que sostienen sockets o descriptores de fichero, así que úsalas solo cuando el anidamiento esté realmente compartido.
Por qué lo preguntan los entrevistadores
El entrevistador pone a prueba tu modelo de nombres frente a objetos. Quien piense en las variables como cajas que guardan valores fallará aquí, y esa misma confusión produce bugs sutiles en los que una plantilla de configuración es mutada por un consumidor y todos los consumidores posteriores heredan el cambio. Mencionar el coste de las copias profundas, y dunder deepcopy para un control a medida, demuestra que has tomado esta decisión con restricciones reales.
Cómo estructurar tu respuesta
- Contrasta contenedor nuevo frente a contenido nuevo.
- Da un ejemplo de mutación anidada.
- Di cuál es el coste de copiar en profundidad.
- Explica cómo decides entre las dos.
Ejemplo de respuesta
Superficial significa que obtienes un objeto exterior nuevo que guarda referencias a exactamente los mismos objetos interiores. Cortar una lista de listas te da una lista nueva, pero hacer append al elemento cero muta también el original, porque las dos listas apuntan a esa misma lista interior. La copia profunda recorre todo el grafo y reconstruye cada nivel, y lleva la cuenta de los objetos que ya ha visto para que los ciclos no revienten la pila. Por defecto uso la superficial porque es barata, y solo recurro a deepcopy cuando sé que una estructura anidada se va a mutar de forma independiente. Tuvimos un bug en el que un diccionario de ajustes por defecto se copiaba solo en el nivel superior, y una política de reintentos anidada la mutó un cliente y se aplicó a todos los demás clientes del worker. La otra cosa que vale la pena decir es que deepcopy no es gratis y no siempre es segura. Cualquier cosa que envuelva una conexión a base de datos o un descriptor de fichero necesita un dunder deepcopy a medida o fallará, o duplicará algo que no debería.
¿Tienes esta entrevista a la vuelta de la esquina? GhostPilot escucha tu llamada en vivo, detecta la pregunta en cuanto la hacen y pone una respuesta estructurada en tu pantalla en tiempo real. Pruébalo en tu próxima entrevista de práctica, o coge un Session Pass de $29, sin suscripción, para la de verdad.
Mira cómo funcionaPreguntas de seguimiento que puedes esperar
- ¿Cómo gestiona deepcopy las referencias circulares?
- ¿Cómo comprobarías si dos nombres apuntan al mismo objeto?
- ¿Cuándo harías el objeto inmutable en su lugar?
Más preguntas para Desarrollador Python
Tu entrevistador hará su propia versión de esta. Pega la descripción real del puesto en el Question Predictor gratuito y obtén las 20 preguntas que ese puesto tiene más probabilidades de hacerte, con lo que cada una busca en realidad.
Predecir mis preguntas