Heim > Artikel > Backend-Entwicklung > Häufige Fragen zu Python-Interviews: flache Kopie und tiefe Kopie
In Python-Interviews sind Shallow Copy und Deep Copy eine relativ schwierige Frage, und drei Prozent der Menschen haben noch nie von Shallow Copy und Deep Copy gehört Verstehe es nur Die Grundkonzepte und einfachen Unterschiede zwischen den beiden. Nur weniger als ein Erwachsener kann den Unterschied zwischen den beiden genau erkennen und das Schreiben relevanter Code-Demos abschließen! Lassen Sie uns diese Schwierigkeit noch heute lösen und dem Vorstellungsgespräch Gewicht für die Beförderung verleihen! Dieser Artikel ist wahrscheinlich der am einfachsten zu verstehende Artikel im gesamten Internet, der flaches Kopieren und tiefes Kopieren erklärt. Solange Sie den Beispielen im Artikel folgen und üben, werden Sie die technischen Schwierigkeiten von flachem Kopieren und tiefem Kopieren auf jeden Fall verstehen Kopie sind!
In Python-Variablendatentypen (Listen, Wörterbücher, Mengen) weisen Sie eine Variable eines variablen Datentyps einer anderen Variablen zu. Diese beiden Variablen beziehen sich auf die dasselbe Objekt und die Speicheradresse ist dieselbe. Wenn eine Variable geändert wird, wird die andere Variable entsprechend geändert. Wenn Sie die technischen Details veränderlicher Datentypen und unveränderlicher Datentypen in Python erfahren möchten, lesen Sie bitte den Artikel: Häufig gestellte Fragen in Python-Interviews: Der Unterschied zwischen veränderlichen Datentypen und unveränderlichen Datentypen.
Nehmen wir ein Beispiel aus meinem vorherigen Artikel.
l1=['a','b','c'] l2=l1 print(id(l1)) print(id(l2)) l2.append('d') print("************") print(id(l1)) print(l1) print(id(l2)) print(l2) 输出: 838366483528 838366483528 ************ 838366483528 ['a', 'b', 'c', 'd'] 838366483528 ['a', 'b', 'c', 'd']
Die Ausgabeergebnisse werden hier nicht erklärt. Die Adressen von l1 und l2 sind gleich, daher beeinflussen sie sich gegenseitig.
Kopiert die oberste Ebene eines Objekts und kopiert nur die „Referenz“ des Objekts.
Nehmen Sie ein Beispiel aus dem vorherigen Artikel. Die Liste enthält nur eine Ebene, dh das Element enthält keine anderen Listen.
l3=['x','y','z'] l4=list(l3) print(id(l3)) print(id(l4)) l4.append('a') print(l3) print(l4) 输出 831456302152 831480344136 ['x', 'y', 'z'] ['x', 'y', 'z', 'a']
Wie Sie den Ergebnissen entnehmen können, sind die Adressen von l3 und l4 unterschiedlich, sodass sie sich nicht gegenseitig beeinflussen.
Nehmen wir ein weiteres Beispiel und lassen das erste Element in l3 eine Liste sein.
l3=[['x','y','z'],'a','b'] l4=list(l3) print(id(l3)) print(id(l4)) l4.append('c') print(l3) print(l4) 结果 533336249416 533337391240 [['x', 'y', 'z'], 'a', 'b'] [['x', 'y', 'z'], 'a', 'b', 'c']
Das Ergebnis ist genau wie erwartet, da das erste Element eine Liste ist, also auch eine Adresse hat, und wir drucken sie aus.
print(id(l3[0])) print(id(l4[0])) 结果 533336248904 533336248904
Wir haben festgestellt, dass die Adressen von l3[0] und l4[0] tatsächlich gleich sind, und führen dann den folgenden Code aus.
l3[0].append('yy') print(l3) print(l4) 结果 [['x', 'y', 'z', 'yy'], 'a', 'b'] [['x', 'y', 'z', 'yy'], 'a', 'b', 'c']
Die Ergebnisse entsprechen den Erwartungen und eine Änderung des Werts von l3[0] wirkt sich auch auf l4[0] aus. Was können wir also tun, um zu verhindern, dass sich l3[0] und l4[0] gegenseitig beeinflussen? Dies erfordert die Einführung tiefer Kopien.
Deep Copy kopiert jede Ebene im Objekt. Das kopierte Objekt ist völlig unabhängig vom Originalobjekt und hat keine Beziehung. Um Deep Copy zu implementieren, müssen Sie die Deepcopy-Methode im Kopiermodul verwenden.
import copy l3=[['x','y','z'],'a','b'] #l4=list(l3) #浅拷贝,使用=copy.copy(l3)也可以实现浅拷贝 l4=copy.deepcopy(l3) #深拷贝 l4.append('c') print(id(l3[0])) print(id(l4[0])) l3[0].append('yy') print(l3) print(l4) 输出 407168435784 407166887304 [['x', 'y', 'z', 'yy'], 'a', 'b'] [['x', 'y', 'z'], 'a', 'b', 'c']
Sie können sehen, dass l3[0] und l4[0] völlig unabhängig sind und keinen Einfluss aufeinander haben.
Es gibt nicht viel zu sagen, verwenden Sie einfach zwei Bilder, um es einfach zu erklären:
Shallow Copy, wie gezeigt unten:
Tiefe Kopie, wie unten gezeigt:
# 🎜🎜 #
Das obige ist der detaillierte Inhalt vonHäufige Fragen zu Python-Interviews: flache Kopie und tiefe Kopie. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!