In Python , Toewijzingsinstructies kopiëren geen objecten, ze creëren bindingen tussen een doel en een object. Wanneer wij gebruik maken van de = operator, het creëert alleen een nieuwe variabele die de referentie van het originele object deelt. Om echte kopieën of klonen van deze objecten te maken, kunnen we de kopieermodule gebruiken Python .
Syntaxis van Python Deepcopy
Syntaxis: kopie.deepcopy(x)
Syntaxis van Python Shallowcopy
Syntaxis: kopie.kopie(x)
Voorbeeld:
Om deze kopieën te maken maken wij gebruik van de kopieermodule. Copy() retourneert een oppervlakkige kopie van de lijst, en deepcopy() retourneert een diepe kopie van de lijst. Zoals je kunt zien, hebben beide dezelfde waarde, maar verschillende ID's.
Voorbeeld: Deze code toont het gebruik van decopy>
module om zowel ondiepe als diepe kopieën van een geneste lijst te makenli1>
. Een oppervlakkig exemplaar,li2>
, is gemaakt met behulp van copy.copy()>
, waarbij de structuur op het hoogste niveau behouden blijft, maar verwijzingen naar de binnenste lijsten worden gedeeld. Een diepe kopie,li3>
, is gemaakt met behulp van copy.deepcopy()>
, resulterend in een volledig onafhankelijke kopie vanli1>
, inclusief alle geneste elementen. De code drukt de ID's en waarden af vanli2>
Enli3>
, waarbij het onderscheid tussen oppervlakkige en diepe kopieën wordt benadrukt in termen van referentie en onafhankelijkheid.
Python3
import> copy> li1> => [> 1> ,> 2> , [> 3> ,> 5> ],> 4> ]> li2> => copy.copy(li1)> print> (> 'li2 ID: '> ,> id> (li2),> 'Value: '> , li2)> li3> => copy.deepcopy(li1)> print> (> 'li3 ID: '> ,> id> (li3),> 'Value: '> , li3)> |
>
>
Uitgang:
li2 ID: 2521878674624 Value: [1, 2, [3, 5], 4] li3 ID: 2521878676160 Value: [1, 2, [3, 5], 4]>
Wat is Deep Copy in Python?
Bij een diepe kopie wordt een nieuw samengesteld object gemaakt voordat er op recursieve wijze kopieën van de items uit het origineel in worden ingevoegd. Het betekent eerst een nieuw verzamelobject construeren en dit vervolgens recursief vullen met kopieën van de onderliggende objecten die in het origineel voorkomen. Bij deep copy wordt een kopie van het object naar een ander object gekopieerd. Het betekent dat enige veranderingen gemaakt naar een kopie van het object weerspiegelen niet in het originele object.

Voorbeeld:
In het bovenstaande voorbeeld is dit de wijziging die in de lijst is aangebracht had geen invloed andere lijsten, wat aangeeft dat de lijst diep gekopieerd is.
Deze code illustreert het diep kopiëren van een lijst met geneste elementen met behulp van decopy>
module. Het drukt in eerste instantie de originele elementen afli1>
en kopieert ze vervolgens diep om te makenli2>
. Een wijziging van een element inli2>
heeft geen invloedli1>
, zoals blijkt uit de afzonderlijke afdrukken. Dit benadrukt hoe diep kopiëren een onafhankelijke kopie creëert, waarbij de inhoud van de originele lijst behouden blijft, zelfs na wijzigingen in de kopie.
html-lijst
Python3
import> copy> li1> => [> 1> ,> 2> , [> 3> ,> 5> ],> 4> ]> li2> => copy.deepcopy(li1)> print> (> 'The original elements before deep copying'> )> for> i> in> range> (> 0> ,> len> (li1)):> > print> (li1[i],end> => ' '> )> print> (> '
'> )> li2[> 2> ][> 0> ]> => 7> print> (> 'The new list of elements after deep copying '> )> for> i> in> range> (> 0> ,> len> ( li1)):> > print> (li2[i],end> => ' '> )> print> (> '
'> )> print> (> 'The original elements after deep copying'> )> for> i> in> range> (> 0> ,> len> ( li1)):> > print> (li1[i],end> => ' '> )> |
>
>
Uitgang:
The original elements before deep copying 1 2 [3, 5] 4 The new list of elements after deep copying 1 2 [7, 5] 4 The original elements after deep copying 1 2 [3, 5] 4>
Wat is ondiepe kopie in Python?
Een ondiepe kopie creëert een nieuw samengesteld object en verwijst vervolgens naar de objecten die zich in het origineel bevinden, wat betekent dat er een nieuw verzamelobject wordt geconstrueerd en dit vervolgens wordt gevuld met verwijzingen naar de onderliggende objecten die in het origineel zijn gevonden. Het kopieerproces herhaalt zich niet en maakt daarom geen kopieën van de onderliggende objecten zelf. Bij een oppervlakkige kopie wordt een referentie van een object naar een ander object gekopieerd. Het betekent dat enige veranderingen gemaakt naar een kopie van een object reflecteren wel in het oorspronkelijke voorwerp. In Python wordt dit geïmplementeerd met behulp van de kopiëren() functie.

Voorbeeld:
In dit voorbeeld de wijziging die in de lijst is aangebracht had invloed een andere lijst, wat aangeeft dat de lijst oppervlakkig is gekopieerd. Belangrijke punten: Het verschil tussen ondiep en diep kopiëren is alleen relevant voor samengestelde objecten (objecten die andere objecten bevatten, zoals lijsten of klasseninstanties):
- Een ondiepe kopie construeert een nieuw samengesteld object en voegt er vervolgens (voor zover mogelijk) verwijzingen in naar de objecten die in het origineel voorkomen.
- Een diepe kopie construeert een nieuw samengesteld object en voegt vervolgens recursief kopieën in van de objecten die in het origineel voorkomen.
Voorbeeld: Deze code demonstreert het oppervlakkig kopiëren van een lijst met geneste elementen met behulp van de ' copy'>
module. In eerste instantie worden de originele elementen afgedruktli1>
, voert vervolgens oppervlakkig kopiëren uit naarli2>
. Een element wijzigen inli2>
beïnvloedt het overeenkomstige element inli1,>
aangezien beide lijsten verwijzingen naar de binnenste lijsten delen. Dit illustreert dat oppervlakkig kopiëren een nieuwe lijst creëert, maar geen volledige onafhankelijkheid biedt voor geneste elementen.
Python3
import> copy> li1> => [> 1> ,> 2> , [> 3> ,> 5> ],> 4> ]> li2> => copy.copy(li1)> print> (> 'The original elements before shallow copying'> )> for> i> in> range> (> 0> ,> len> (li1)):> > print> (li1[i],end> => ' '> )> print> (> '
'> )> li2[> 2> ][> 0> ]> => 7> print> (> 'The original elements after shallow copying'> )> for> i> in> range> (> 0> ,> len> ( li1)):> > print> (li1[i],end> => ' '> )> |
selectie sorteer java
>
>
Uitgang:
The original elements before shallow copying 1 2 [3, 5] 4 The original elements after shallow copying 1 2 [7, 5] 4>
AANBEVOLEN ARTIKELEN – Verschil tussen ondiepe en diepe kopie van een klasse