Eine Shallow Copy erzeugt einen neuen äußeren Container, dessen Elemente dieselben Objekte wie im Original sind, sodass das Mutieren einer verschachtelten Liste in beiden auftaucht. Eine Deep Copy kopiert rekursiv alles und gibt dir eine vollständig unabhängige Struktur. Deep Copies kosten Zeit und Speicher und können bei Objekten mit Sockets oder File Handles brechen, also nimm sie nur, wenn Verschachteltes wirklich geteilt wird.
Warum Interviewer das fragen
Der Interviewer testet dein Modell von Namen gegen Objekte. Wer Variablen für Kisten mit Werten hält, liegt hier falsch, und dieselbe Verwirrung produziert subtile Bugs, bei denen ein Config-Template von einem Konsumenten mutiert wird und alle späteren Konsumenten die Änderung erben. Die Kosten von Deep Copies zu erwähnen, und dunder deepcopy für eigene Kontrolle, zeigt, dass du diese Entscheidung unter echten Randbedingungen getroffen hast.
So baust du deine Antwort auf
- Stell neuen Container gegen neuen Inhalt.
- Gib ein Beispiel für eine verschachtelte Mutation.
- Nenn die Kosten des tiefen Kopierens.
- Sag, wie du zwischen beiden entscheidest.
Beispielantwort
Shallow heißt, du bekommst ein neues äußeres Objekt, das Referenzen auf exakt dieselben inneren Objekte hält. Das Slicen einer Liste von Listen gibt dir eine frische Liste, aber ein append auf Element null mutiert auch das Original, weil beide Listen auf dieselbe innere Liste zeigen. Deep Copy läuft den ganzen Graphen ab und baut jede Ebene neu, und sie merkt sich bereits gesehene Objekte, damit Zyklen den Stack nicht sprengen. Mein Default ist shallow, weil es billig ist, und ich greife nur zu deepcopy, wenn ich weiß, dass eine verschachtelte Struktur unabhängig mutiert wird. Wir hatten mal einen Bug, bei dem ein Default-Settings-Dictionary nur auf oberster Ebene kopiert wurde, und eine verschachtelte Retry-Policy wurde von einem Client mutiert und galt danach für alle anderen Clients auf dem Worker. Das Zweite, was sich zu sagen lohnt: deepcopy ist nicht gratis und nicht immer sicher. Alles, was eine Datenbankverbindung oder ein File Handle umhüllt, braucht ein eigenes dunder deepcopy, sonst scheitert es oder dupliziert etwas, das es nicht sollte.
Steht dieses Vorstellungsgespräch bald an? GhostPilot hört bei deinem Live-Call mit, erkennt die Frage in dem Moment, in dem sie gestellt wird, und bringt dir eine strukturierte Antwort in Echtzeit auf den Bildschirm. Probier es im nächsten Mock aus, oder hol dir einen $29 Session Pass, kein Abo, für den Ernstfall.
So funktioniert esNachfragen, mit denen du rechnen solltest
- Wie geht deepcopy mit zirkulären Referenzen um?
- Wie würdest du prüfen, ob zwei Namen auf dasselbe Objekt zeigen?
- Wann würdest du das Objekt stattdessen unveränderlich machen?
Weitere Fragen für Python-Entwickler
Dein Interviewer stellt seine eigene Version davon. Kopier deine echte Stellenbeschreibung in den kostenlosen Question Predictor und bekomm die 20 Fragen, die diese Rolle am wahrscheinlichsten stellt, samt dem, worauf jede wirklich abzielt.
Meine Fragen vorhersagen