skopiuj do Pythona (Deep Copy i Shallow Copy)

| | | |

Czasami wymagana jest kopia, aby można było zmienić jedną kopię bez zmiany innej. Python ma dwa sposoby tworzenia kopii:

  • Głęboka kopia
  • Płytka kopia

Aby wykonać te kopie, używamy skopiuj moduł . Używamy modułu copy do operacji kopiowania płytkiego i głębokiego. Na przykład


# importuj moduł kopiowania

importuj kopiuj


# zainicjuj listę 1

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


# użyj kopii do płytkiej kopii

li2 = kopiuj.copy ( li1)


# używanie Deepcopy do Deepcopy

li3 < /kod> = copy.deepcopy (li1)

W powyższym kodzie, copy () zwraca płytką kopię listy, a deepcopy () zwraca głęboką kopię listy.

deepcopy

Głębokie kopiowanie — jest to proces, w którym proces kopiowania zachodzi rekurencyjnie. Oznacza to najpierw utworzenie nowego obiektu kolekcji, a następnie rekurencyjne wypełnienie go kopiami obiektów podrzędnych znalezionych w oryginale. W przypadku głębokiej kopii kopia obiektu jest kopiowana do innego obiektu. Oznacza to, że wszelkie zmiany wprowadzone w kopii obiektu nie są odzwierciedlane w oryginalnym obiekcie. W pythonie odbywa się to za pomocą funkcji deepcopy() .


# Kod w Pythonie demonstrujący operacje kopiowania


# import & quot; kopiuj & quot; dla operacji kopiowania

importuj kopiuj


# inicjalizacja listy 1

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


# używanie Deepcopy do głębokiego kopiowania

li2 = copy.deepcopy (li1)


# oryginalne elementy listy

print ( "Oryginalne elementy przed głębokim kopiowaniem" )

for i in range ( 0 , len (li1)):

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

print ( " " )


# dodaj i element do nowej listy

li2 [ 2 ] [ 0 ] = 7


# Zmiana jest odzwierciedlona w l2

print ( "Nowa lista elementów po głębokim kopiowaniu " )

for i in zakres ( 0 , len (li1)):

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


print ( "" )


# Zmiana jest NIE odzwierciedlone na oryginalnej liście
# jak głęboka kopia

print ( "Oryginalne elementy po głębokim kopiowaniu" )

for i in zakres ( 0 , len (li1)):

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

Wyjście:

Oryginalny element s przed głębokim kopiowaniem 1 2 [3, 5] 4 Nowa lista elementów po głębokim kopiowaniu 1 2 [7, 5] 4 Oryginalne elementy po głębokim kopiowaniu 1 2 [3, 5] 4 

W w powyższym przykładzie zmiana dokonana na liście nie wpłynęła na inne listy, co wskazuje na głębokie kopiowanie listy.

Płytka kopia

Płytka kopia oznacza utworzenie nowego obiektu kolekcji, a następnie wypełnienie go odniesieniami do znalezionych obiektów podrzędnych w orginale. Proces kopiowania nie powtarza się i dlatego nie tworzy kopii samych obiektów podrzędnych. W przypadku płytkiej kopii odwołanie do obiektu jest kopiowane do innego obiektu. Oznacza to, że wszelkie zmiany wprowadzone do kopii obiektu są odzwierciedlane w oryginalnym obiekcie. Python robi to za pomocą funkcji "copy () ".


# Kod w Pythonie demonstrujący operacje kopiowania


# importuj & quot; kopiuj & quot; dla operacji kopiowania

importuj kopiuj


# inicjalizacja listy 1

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


# użyj kopii do płytkiej kopii

li2 = copy.copy (li1)


# oryginalne pozycje listy

print ( " Oryginalne elementy przed płytkim kopiowaniem " )

for i w zakres ( 0 , len (li1)):

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


print ( "" )


# dodaj i element do nowej listy

li2 [ 2 ] [ 0 ] = 7


# sprawdź, czy zmiana została uwzględniona

print ( "Oryginalne elementy po płytkim kopiowaniu" )

for i in zakres ( 0 , len (li1 )):

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

Wyjście:

Oryginalne elementy przed płytkim kopiowaniem 1 2 [3, 5] 4 Oryginalne elementy po płytkim kopiowaniu 1 2 [7, 5] 4 

W powyższym przykładzie zmiana dokonana na liście to weszło w życie na innej liście, wskazując, że lista została skopiowana.

Ważne punkty:
Różnica między kopiami płytkimi i głębokimi dotyczy tylko obiektów złożonych (obiektów, które zawierają inne obiekty, takie jak listy lub instancje klas):

  • Płytka kopia tworzy nowy obiekt złożony, a następnie (o ile to możliwe) wstawia odniesienia do obiektów znalezionych w oryginale.
  • Głęboka kopia tworzy nowy obiekt złożony, a następnie rekurencyjnie wstawia do niego kopie obiektów znalezionych w oryginale.

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