kopieer naar Python (Deep Copy en Shallow Copy)

| | | |

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 () ".


# Python-code om kopieerbewerkingen te demonstreren


# import & quot; kopieer & quot; voor kopieerbewerkingen

import kopiëren


# initialisatielijst 1

li1 = [ 1 , 2 , [ 3 , 5 ], 4 ]


# gebruik kopie voor ondiepe kopie

li2 = copy.copy (li1)


# originele lijstitems

print ( " De originele elementen voor oppervlakkig 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


# controleer of de wijziging wordt weergegeven

print ( "De originele elementen na oppervlakkig kopiëren" )

voor i in bereik ( 0 , len (li1 )):

print (li1 [i], end = " " )

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.

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers

News


Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method