Soms is een kopie vereist, zodat u de ene kopie kunt wijzigen zonder de andere te wijzigen. Python heeft twee manieren om kopieën te maken:
- Diepe kopie
- Ondiepe kopie
Om deze kopieën te maken, gebruiken we kopieer
-module. We gebruiken de module copy
voor oppervlakkige en diepe kopieerbewerkingen. Bijvoorbeeld
# import copy module
import
kopieer
# initialiseer lijst 1
li1
=
[
1
,
2
, [
3
,
5
],
4
]
# gebruik kopie voor ondiepe kopie
li2
=
kopieer.copy ( li1)
# gebruik Deepcopy voor Deepcopy
li3
=
copy.deepcopy (li1)
In de bovenstaande code, copy ()
retourneert een ondiepe kopie van de lijst, en deepcopy ()
retourneert een diepe kopie van de lijst.
deepcopy
Deep Copy — het is een proces waarbij het kopieerproces recursief plaatsvindt. Dit betekent dat u eerst een nieuw collectieobject moet maken en dit vervolgens recursief moet vullen met kopieën van de onderliggende objecten die in het origineel zijn gevonden. In het geval van een diepe kopie wordt een kopie van een object gekopieerd naar een ander object. Dit betekent dat wijzigingen die zijn aangebracht in de kopie van het object, niet worden weergegeven in het oorspronkelijke object. In python wordt dit gedaan met behulp van de functie deepcopy () .
# Python-code om kopieerbewerkingen te demonstreren
# import & quot; kopieer & quot; voor kopieerbewerkingen
import
kopiëren
# initialisatielijst 1
li1
=
[
1
,
2
, [
3
,
5
],
4
]
# Deepcopy gebruiken om diep te kopiëren
li2
=
copy.deepcopy (li1)
# originele lijstitems
print
(
"De originele elementen vóór diep kopiëren"
)
voor
i
in
bereik
(
0
,
len
(li1)):
print
(li1 [i], end
=
" "
)
print
(
" "
)
# voeg en item toe aan nieuwe lijst
li2 [
2
] [
0
]
=
7
# De wijziging wordt weergegeven in l2
print
(
"De nieuwe lijst met elementen na diep kopiëren"
)
voor
i
in
bereik
(
0
,
len
(li1)):
print
(li2 [i], end
=
""
)
print
(
""
)
# Wijziging is NIET weergegeven in de originele lijst
# like a deep copy
print
(
"De originele elementen na diep kopiëren"
)
voor
i
in
bereik
(
0
,
len
(li1)):
print
(li1 [i], end
=
""
)
Afsluiten:
Het originele element s voor diep kopiëren 1 2 [3, 5] 4 De nieuwe lijst met elementen na diep kopiëren 1 2 [7, 5] 4 De originele elementen na diep kopiëren 1 2 [3, 5] 4
In in het bovenstaande voorbeeld had een wijziging in de lijst geen invloed op andere lijsten, wat duidt op diep kopiëren van de lijst.
Ondiepe kopie
Ondiepe kopie betekent een nieuw collectieobject maken en dit vervolgens vullen met verwijzingen naar gevonden onderliggende objecten in het origineel. Het kopieerproces herhaalt zich niet en maakt dus geen kopieën van de onderliggende objecten zelf. Bij een oppervlakkige kopie wordt een verwijzing naar een object gekopieerd naar een ander object. Dit betekent dat alle wijzigingen die zijn aangebracht in de kopie van het object, worden weerspiegeld in het oorspronkelijke object. Python doet dit met de functie "copy () ".
|
Afsluiten:
De oorspronkelijke elementen voor oppervlakkig kopiëren 1 2 [3, 5] 4 De originele elementen na oppervlakkig kopiëren 1 2 [7, 5] 4
In het bovenstaande voorbeeld is de wijziging in de lijst trad in werking op een andere lijst, wat aangeeft dat de lijst is gekopieerd.
Belangrijke punten:
Het verschil tussen ondiepe en diepe kopieën is alleen van toepassing op samengestelde objecten (objecten die andere objecten, zoals lijsten of klasseninstanties):
- De ondiepe kopie maakt een nieuw samengesteld object en voegt vervolgens (voor zover mogelijk) verwijzingen in naar objecten die in het origineel zijn gevonden.
- Een diepe kopie maakt een nieuw samengesteld object en voegt er vervolgens recursief kopieën van de objecten in die in het origineel zijn gevonden.