Heim >Backend-Entwicklung >Python-Tutorial >Häufige Fragen zu Python-Interviews: flache Kopie und tiefe Kopie

Häufige Fragen zu Python-Interviews: flache Kopie und tiefe Kopie

WBOY
WBOYnach vorne
2023-04-12 11:37:051809Durchsuche

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!

Variablenzuweisung

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.

Flache Kopie

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

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.

Zusammenfassung von Shallow Copy und Deep Copy

Es gibt nicht viel zu sagen, verwenden Sie einfach zwei Bilder, um es einfach zu erklären:

Shallow Copy, wie gezeigt unten:

Häufige Fragen zu Python-Interviews: flache Kopie und tiefe Kopie

Tiefe Kopie, wie unten gezeigt:


# 🎜🎜 #Häufige Fragen zu Python-Interviews: flache Kopie und tiefe Kopie

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:51cto.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen