Úvod

V tomto tutoriálu, budeme diskutovat o mělké kopie, vs hluboká kopie s pomocí příkladů v Pythonu. My se bude týkat vymezení hluboké a mělké kopie, spolu s jeho implementací v jazyce Python zhodnotit základní rozdíly mezi dvěma typy kopií.

v mnoha programech, které píšeme, bez ohledu na to, jak jsou základní, nakonec potřebujeme zkopírovat seznam nebo objekt z jednoho z mnoha důvodů, jako je výpočetní účinnost., Existují dva způsoby, jak to udělat, buď vytvořit hlubokou kopii nebo mělkou kopii. Než budeme diskutovat o rozdílech mezi těmito dvěma, nejprve pochopíme, jaké hluboké a mělké kopie jsou přesně.

hluboké kopie v Pythonu

hluboká kopie vytvoří novou a samostatnou kopii celého objektu nebo seznamu s vlastní jedinečnou adresou paměti. To znamená, že všechny změny, které provedete v nové kopii objektu/seznamu, se nebudou odrážet v původní kopii. K tomuto procesu dochází nejprve vytvořením nového seznamu nebo objektu, následovaným rekurzivním kopírováním prvků z původního do nového.,

stručně řečeno, oba objekty jsou zcela nezávislé na sobě. To je podobné konceptu předávání hodnoty v jazycích jako C++, Java a C#.

Deep Copy Example

implementovat koncept hlubokých kopií v Pythonu, budeme používat modul kopírování.

řekněme, že máme seznam seznamů result_A, který obsahuje známky studentů ve 3 předměty pro první dva roky školy, a přejeme vytvořit přesně podobný seznam výsledků pro student B stejně., Budeme se snažit a dělat hluboké kopie result_A seznam, a udělat pár změn v tom, že hluboká kopie později ukázat známky studenta B.

Příklad 1:

Ve skriptu výše, používáme deepcopy metoda copy modul pro kopírování seznamu result_A result_B. Dále vytiskneme obsah obou seznamů na obrazovce.

výstup:

, ], ]

jak vidíte, seznamy jsou totožné. Později v tomto článku uvidíme, jak se to liší od mělkých kopií.,

Mělké Kopie v Pythonu

mělkou kopii také dělá samostatný nový objekt, objekt nebo seznam, ale místo toho, kopírování dítě prvků do nového objektu, je to prostě kopie odkazy na jejich adresy paměti. Pokud tedy provedete změnu původního objektu, odráží se v zkopírovaném objektu a naopak. Stručně řečeno, obě kopie jsou na sobě závislé. To je podobné konceptu předávání referencí v programovacích jazycích jako C++, C# a Java.,

příklad mělké kopie

k implementaci v Pythonu použijeme modul copy, ale tentokrát budeme volat jeho funkci copy.

použijeme stejný seznam příkladů pro příklad mělké kopie.

Příklad 2:

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

Ve skriptu výše, budeme používat copy metoda copy modul, aby se mělkou kopii seznamu result_A, který jsme pojmenovali result_B., Dále byl obsah obou seznamů vytištěn na konzoli.

výstup:

, ], ]

seznamy jsou opět stejné, jak se očekávalo. Dále vysvětlíme rozdíl mezi výsledky, které získáme z funkcí copy a deepcopy.

Rozdíl Mezi Hluboké a Mělké Kopie

Teď, když jsme diskutovali, co mělké a hluboké kopie jsou a proč jsme se vytvořit kopie, je čas mluvit o rozdílu mezi nimi., V podstatě existují jen dva základní rozdíly a jsou navzájem propojeny:

  1. Hluboké kopie ukládá kopie objektu hodnoty, vzhledem k tomu, mělké kopie příběhy, odkazy na původní adresu paměti
  2. Hluboké kopírování neodráží změny provedené v nové/kopírovat objekt v původním objektu; vzhledem k tomu, mělké kopie

dříve Než přejdeme k realizaci, Ráda bych vám představit tento scénář. Řekněme, že dva lidé chtějí sdílet drink; mají dvě prázdné sklenice a dvě slámy., Mohou sdílet tento nápoj v dvěma způsoby:

  1. Dát drink v jedné sklenici, a dát obě brčka do sklenice pro sdílení
  2. Dát drink v obou skel, a dát jedna kapka do každé sklenice

první scénář je, že mělké kopie. Obě proměnné / instance směřují / používají stejné umístění paměti pro své operace. Druhým scénářem je hluboká kopie. Obě proměnné / instance ukazují na / pomocí dvou různých paměťových míst pro jejich operace.,

příklad porovnání

aby byl rozdíl jasný, použijeme tyto informace v našich výše uvedených dvou příkladech, počínaje příkladem 1.

Výše, jsme vytvořili seznam result_A a hluboké kopie je pojmenovaný result_B. Zkusme změnit obsah result_B a uvidíme, jestli to má nějaký vliv na obsah result_A.

výstup:

Original List:, ]Deep Copy:, ]

očekávaný výsledek je, že původní seznam zůstává nezměněn., A jak vidíte, změny v hluboké kopii neovlivnily původní seznam.

nyní můžete vyzkoušet totéž s příkladem 2-mělká kopie.

výstup:

Original List:, ]Shallow Copy:, ]

zde očekávaným výsledkem je, že původní seznam i zkopírovaný seznam jsou upraveny po jediné změně. A jak vidíte, změna na mělkou kopii vedla k tomu, že se tato změna promítla i do původního seznamu.

závěr

v tomto příspěvku jsme hovořili o tom, co je mělká a hluboká kopie a jak je můžeme vytvořit v jazyce Python pomocí modulu „kopírovat“., copy a deepcopy pro vytvoření mělkých a hlubokých kopií. Dále jsme diskutovali o dva základní rozdíly mezi mělkou a hlubokou kopií, a také provádí mělké a hluboké kopírování v pythonu pochopit tyto rozdíly v lepším způsobem.