Articles

Python Mělké a Hluboké kopie Kopie


Kopírovat Objekt v Pythonu

V Pythonu, budeme používat = provozovatel vytvořit kopii objektu. Můžete si myslet, že to vytváří nový objekt; to není. To jen vytváří novou proměnnou, která sdílí odkaz na původní objekt.

vezměme si příklad, kde jsme se vytvořit seznam s názvem old_list a předat odkaz na objekt new_list pomocí = operátor.,

Příklad 1: Kopie pomocí = operátor

Když jsme se spustit výše uvedený program, výstup bude:

Old List: , , ]ID of Old List: 140673303268168New List: , , ]ID of New List: 140673303268168

Jak můžete vidět z výstupu obou proměnných old_list a new_list sdílí stejné id i.e 140673303268168.

takže pokud chcete změnit libovolné hodnoty v new_list nebo old_list, změna je viditelná v obou.

v podstatě někdy budete chtít mít původní hodnoty nezměněné a pouze upravit nové hodnoty nebo naopak., V Pythonu existují dva způsoby, jak vytvořit kopie:

  1. Mělké Kopie
  2. Hluboké Kopírování

Aby tyto kopie práce, budeme používat copy modul.

Copy Module

používáme modulcopy Pythonu pro mělké a hluboké kopírovací operace. Předpokládejme, musíte zkopírovat sloučenina seznamu x. Například:

import copycopy.copy(x)copy.deepcopy(x)

, copy() návrat mělkou kopii x. Podobně, deepcopy() návrat hlubokou kopii x.,

mělká kopie

mělká kopie vytvoří nový objekt, který ukládá odkaz na původní prvky.

takže mělká kopie nevytváří kopii vnořených objektů, místo toho pouze kopíruje odkaz vnořených objektů. To znamená, že proces kopírování se neopakuje ani nevytváří kopie vnořených objektů.,

Příklad 2: Vytvořit kopii pomocí mělké kopie

import copyold_list = , , ]new_list = copy.copy(old_list)print("Old list:", old_list)print("New list:", new_list)

Když jsme spuštění programu , bude výstup:

Old list: , , ]New list: , , ]

Ve výše uvedeném programu jsme vytvořili vnořené seznam a pak mělké kopie pomocí copy() metoda.

to znamená, že vytvoří nový a nezávislý objekt se stejným obsahem. Chcete-li to ověřit, vytiskneme old_list i new_list.,

potvrďte, že new_list se liší od old_list, snažíme se přidávat nové vnořený objekt na původní a podívat se na to.

Příklad 3: Přidání do old_list, pomocí mělké kopie

Když jsme spuštění programu, bude na výstupu:

Old list: , , , ]New list: , , ]

Ve výše uvedeném programu jsme vytvořili mělké kopie old_list. New_list obsahuje odkazy na původní vnořené objekty uložené v old_listu. Pak přidáme nový seznam i. e do old_list., Tento nový seznam nebyl zkopírován do new_list.

při změně vnořených objektů v old_listu se však změny objeví v new_listu.

Příklad 4: Přidání nové vnořený objekt pomocí Mělké kopie

import copyold_list = , , ]new_list = copy.copy(old_list)old_list = 'AA'print("Old list:", old_list)print("New list:", new_list)

Když jsme spuštění programu, bude na výstupu:

Old list: , , ]New list: , , ]

Hluboké Kopírování

hlubokou kopii vytvoří nový objekt a rekurzivně přidává kopie vnořené objekty přítomné v původní prvky.

pokračujme v příkladu 2., Vytvoříme však hlubokou kopii pomocí funkce deepcopy() přítomná v modulu copy. Hluboká kopie vytváří nezávislou kopii původního objektu a všech jeho vnořených objektů.

Příklad 5: Kopírování seznamu pomocí deepcopy()

import copyold_list = , , ]new_list = copy.deepcopy(old_list)print("Old list:", old_list)print("New list:", new_list)

Když jsme spuštění programu, bude na výstupu:

Old list: , , ]New list: , , ]

výše uvedený program, můžeme použít deepcopy() funkce pro vytvoření kopie, která vypadá podobně.,

Pokud však provedete změny vnořených objektů v původním objektu old_list, neuvidíte žádné změny v kopii new_list.

Příklad 6: Přidání nové vnořený objekt v seznamu pomocí Hluboké kopie

Když jsme spuštění programu, bude na výstupu:

Old list: , , ]New list: , , ]

Ve výše uvedeném programu, když jsme přiřadit novou hodnotu old_list, můžeme vidět pouze old_list je upraven. To znamená, že old_list i new_list jsou nezávislé. Je to proto, že old_list byl rekurzivně zkopírován, což platí pro všechny jeho vnořené objekty.