logo

kopiraj v Python (globoko kopiranje in plitko kopiranje)

noter Python , Stavki o dodelitvi ne kopirajo objektov, temveč ustvarijo vezi med ciljem in objektom. Ko uporabljamo = ustvari le novo spremenljivko, ki ima skupno referenco izvirnega objekta. Za ustvarjanje pravih kopij ali klonov teh predmetov lahko uporabimo modul za kopiranje v Python .

Sintaksa Python Deepcopy

Sintaksa: copy.deepcopy(x)



Sintaksa Python Shallowcopy

Sintaksa: copy.copy(x)

primer:

Za izdelavo teh kopij uporabljamo modul za kopiranje. Copy() vrne plitvo kopijo seznama, deepcopy() pa vrne globoko kopijo seznama. Kot lahko vidite, imata oba enako vrednost, vendar različna ID-ja.

primer: Ta koda prikazuje uporabocopy>modul za ustvarjanje plitvih in globokih kopij ugnezdenega seznamali1>. Plitka kopija,li2>, je ustvarjen z uporabo copy.copy()> , ohranja strukturo najvišje ravni, vendar deli sklicevanja na notranje sezname. Globoka kopija,li3>, je ustvarjen z uporabo copy.deepcopy()> , kar je povzročilo popolnoma neodvisno kopijoli1>, vključno z vsemi ugnezdenimi elementi. Koda natisne ID-je in vrednostili2>inli3>, ki poudarja razliko med plitvimi in globokimi kopijami v smislu referenčnosti in neodvisnosti.



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)>

>

>

Izhod:

  li2 ID:   2521878674624   Value:   [1, 2, [3, 5], 4]   li3 ID:   2521878676160   Value:   [1, 2, [3, 5], 4]>

Kaj je globoka kopija v Pythonu?

Globoka kopija ustvari nov sestavljen objekt, preden vanj na rekurziven način vstavi kopije elementov, ki jih najdemo v izvirniku. To pomeni, da najprej zgradite nov objekt zbirke in ga nato rekurzivno napolnite s kopijami podrejenih objektov, ki jih najdete v izvirniku. V primeru globoke kopije se kopija predmeta prekopira v drug objekt. To pomeni, da morebitne spremembe narejena na kopijo predmeta ne odražajo v izvirnem predmetu.

Globoka kopija v Pythonu

primer:

V zgornjem primeru je sprememba na seznamu ni vplivalo drugi seznami, kar pomeni, da je seznam globoko kopiran.

Ta koda ponazarja globoko kopiranje seznama z ugnezdenimi elementi z uporabocopy>modul. Sprva natisne izvirne elementeli1>, nato jih globoko kopira za ustvarjanjeli2>. Sprememba elementa vli2>ne vplivali1>, kot je razvidno iz ločenih izpisov. To poudarja, kako globoko kopiranje ustvari neodvisno kopijo, ki ohranja vsebino izvirnega seznama tudi po spremembah kopije.

tabela ascii java

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>=>' '>)>

>

>

natasha dalal

Izhod:

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>

Kaj je plitka kopija v Pythonu?

Plitka kopija ustvari nov sestavljeni objekt in se nato v njem sklicuje na objekte, ki jih vsebuje izvirnik, kar pomeni, da sestavi nov objekt zbirke in ga nato zapolni s sklici na podrejene objekte, najdene v izvirniku. Postopek kopiranja se ne ponavlja in zato ne bo ustvaril kopij samih podrejenih predmetov. V primeru plitve kopije se sklic na objekt prekopira v drug objekt. To pomeni, da morebitne spremembe narejena v kopijo predmeta odražaj v izvirnem predmetu. V pythonu je to implementirano z uporabo kopirati() funkcijo.

Plitka kopija v Pythonu

primer:

V tem primeru je sprememba na seznamu vplivalo drug seznam, kar pomeni, da je seznam plitko kopiran. Pomembne točke: Razlika med plitkim in globokim kopiranjem je pomembna samo za sestavljene objekte (objekte, ki vsebujejo druge predmete, kot so seznami ali primerki razreda):

  • Plitka kopija sestavi nov sestavljen objekt in nato (kolikor je to mogoče) vanj vstavi sklice na predmete, ki jih najdemo v izvirniku.
  • Globoka kopija sestavi nov sestavljeni objekt in nato rekurzivno vanj vstavi kopije objektov, najdenih v izvirniku.

primer: Ta koda prikazuje plitvo kopiranje seznama z ugnezdenimi elementi z uporabo ' copy'> modul. Na začetku natisne izvirne elementeli1>, nato izvede plitvo kopiranje vli2>. Spreminjanje elementa vli2>vpliva na ustrezen element vli1,>saj si oba seznama delita reference na notranje sezname. To ponazarja, da plitvo kopiranje ustvari nov seznam, vendar ne zagotavlja popolne neodvisnosti za ugnezdene elemente.

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>=>' '>)>

>

>

Izhod:

The original elements before shallow copying 1 2 [3, 5] 4 The original elements after shallow copying 1 2 [7, 5] 4>

PRIPOROČENI ČLANKI Razlika med plitko in globoko kopijo razreda