Inleiding

in deze tutorial gaan we het hebben over ondiepe kopieën Versus diepe kopieën met behulp van voorbeelden in Python. We zullen de definitie van een diepe en ondiepe kopie behandelen, samen met de implementatie ervan in de Python-taal om de kernverschillen tussen de twee soorten kopieën te evalueren.

in veel van de programma ‘ s die we schrijven, hoe basaal ze ook zijn, moeten we uiteindelijk een lijst of een object kopiëren om een van de vele redenen, zoals computationele efficiëntie., Er zijn twee manieren om dat te doen, ofwel Maak een diepe kopie of een ondiepe kopie. Voordat we de verschillen tussen de twee bespreken, laten we eerst begrijpen wat diepe en ondiepe kopieën precies zijn.

diepe kopieën in Python

een diepe kopie maakt een nieuwe en aparte kopie van een volledig object of lijst met een eigen uniek geheugenadres. Wat dit betekent is dat alle wijzigingen die u maakt in de nieuwe kopie van het object/lijst niet zal weerspiegelen in de oorspronkelijke. Dit proces gebeurt door eerst een nieuwe lijst of object te maken, gevolgd door recursief de elementen te kopiëren van de oorspronkelijke naar de nieuwe.,

om het kort te zeggen, beide objecten zijn volledig onafhankelijk van elkaar. Dit is vergelijkbaar met het concept van het doorgeven van waarde in talen als C++, Java en C#.

Deep Copy voorbeeld

om het concept van deep copies in Python te implementeren, zullen we de copy module gebruiken.

laten we zeggen dat we een lijst met lijsten hebben genaamd result_A, die cijfers van student A bevat in 3 vakken voor de eerste twee jaar van school, en we willen ook een exact vergelijkbare lijst met resultaten voor student B maken., We zullen proberen een diepe kopie te maken van de result_A lijst, en een paar wijzigingen aanbrengen in die diepe kopie later om de graden van student B.

Voorbeeld 1:

in het bovenstaande script gebruiken we de deepcopy methode van de copy module om lijst te kopiëren result_A to result_B. Vervolgens printen we de inhoud van beide lijsten op het scherm.

Output:

, ], ]

zoals u kunt zien, zijn de lijsten identiek. Later in dit artikel zullen we zien hoe dit verschilt van oppervlakkige kopieën.,

ondiepe kopieën in Python

een ondiepe kopie maakt ook een apart nieuw object object of lijst, maar in plaats van de onderliggende elementen naar het nieuwe object te kopiëren, kopieert het simpelweg de verwijzingen naar hun geheugenadressen. Dus, als je een verandering in het oorspronkelijke object, het zou reflecteren in het gekopieerde object, en vice versa. Om het kort te zeggen, beide kopieën zijn afhankelijk van elkaar. Dit is vergelijkbaar met het concept van het passeren door referentie in programmeertalen zoals C++, C#, en Java.,

ondiep exemplaar voorbeeld

om dit in Python te implementeren, zullen we de copy module opnieuw gebruiken, maar deze keer zullen we de copy functie aanroepen.

laten we dezelfde voorbeeldlijst gebruiken voor het voorbeeld van de ondiepe kopie.

Voorbeeld 2:

# Program 2 - Shallow Copyimport copyresult_A = , ]result_B = copy.copy(result_A)print(result_A)print(result_B)

in het bovenstaande script gebruiken we de copy methode uit de copy module om een ondiepe kopie van de lijst te maken result_A die we ., Vervolgens is de inhoud van beide lijsten afgedrukt op de console.

Output:

, ], ]

nogmaals, de lijsten zijn hetzelfde, zoals verwacht. Vervolgens zullen we het verschil uitleggen tussen de resultaten die we krijgen van de copy en deepcopy functies.

verschil tussen diepe en ondiepe kopieën

nu we hebben besproken wat ondiepe en diepe kopieën zijn en waarom we kopieën maken, is het tijd om te praten over het verschil tussen hen., In wezen zijn er slechts twee kernverschillen en ze zijn met elkaar verbonden:

  1. Deep copy slaat kopieën op van de waarden van een object, terwijl de verwijzingen naar het oorspronkelijke geheugenadres
  2. Deep copy niet de wijzigingen weerspiegelt die zijn aangebracht in het nieuwe/gekopieerde object in het oorspronkelijke object; terwijl, shallow copy wel

voordat we verder gaan met de implementatie, wil ik graag dat je je dit scenario voorstelt. Laten we zeggen dat twee mensen een drankje willen delen; ze hebben twee lege glazen en twee rietjes., Ze kunnen deze drank op twee manieren delen:

  1. doe de drank in één glas, en doe beide rietjes in dat Glas Voor het delen van
  2. doe de drank in beide glazen, en doe één rietje in elk glas

het eerste scenario is dat van een ondiepe kopie. Beide variabelen / instanties wijzen / gebruiken dezelfde geheugenlocatie voor hun operaties. Het tweede scenario is dat van een diepe kopie. Beide variabelen / instanties wijzen naar / gebruiken twee verschillende geheugenlocaties voor hun operaties.,

Vergelijkingsvoorbeeld

om het verschil duidelijk te maken, gebruiken we deze informatie in onze bovenstaande twee voorbeelden, beginnend met Voorbeeld 1.

hierboven hebben we de lijst result_A aangemaakt en een diepe kopie gemaakt met de naam result_B. Laten we proberen de inhoud in result_B te veranderen en kijken of het enig effect heeft op de inhoud van result_A.

Output:

Original List:, ]Deep Copy:, ]

het verwachte resultaat is dat de oorspronkelijke lijst ongewijzigd blijft., Zoals je kunt zien, hadden veranderingen in de diepe kopie geen invloed op de oorspronkelijke lijst.

laten we nu hetzelfde proberen met Voorbeeld 2-ondiepe kopie.

Output:

Original List:, ]Shallow Copy:, ]

Hier wordt verwacht dat zowel de oorspronkelijke lijst als de gekopieerde lijst na de enkele wijziging worden gewijzigd. En zoals je kunt zien, het maken van de verandering in de ondiepe kopie resulteerde in die verandering wordt weerspiegeld in de oorspronkelijke lijst ook.

conclusie

in dit bericht hebben we gesproken over wat een ondiepe en een diepe kopie is en hoe we ze kunnen maken in Python taal met behulp van de ‘copy’ module., We gebruikten twee van zijn functies, namelijk copy en deepcopy om respectievelijk ondiepe en diepe kopieën te maken. Verder bespraken we de twee kernverschillen tussen een ondiepe en een diepe kopie, en implementeerden we ook ondiepe en diepe kopie in python om die verschillen op een betere manier te begrijpen.