In Python , Piešķiršanas priekšraksti nekopē objektus, tie veido saistījumus starp mērķi un objektu. Kad mēs izmantojam = operators, tas tikai izveido jaunu mainīgo, kas koplieto sākotnējā objekta atsauci. Lai izveidotu reālas šo objektu kopijas vai klonus, mēs varam izmantot kopēšanas moduli Python .
Python Deepcopy sintakse
Sintakse: copy.deepcopy(x)
Python Shallowcopy sintakse
Sintakse: copy.copy(x)
Piemērs:
Lai izgatavotu šīs kopijas, mēs izmantojam kopēšanas moduli. Copy() atgriež seklu saraksta kopiju, un deepcopy() atgriež dziļu saraksta kopiju. Kā redzat, abiem ir vienāda vērtība, bet atšķirīgi ID.
Piemērs: Šis kods parāda, kā tiek izmantotscopy>
moduli, lai izveidotu gan seklas, gan dziļas ligzdotā saraksta kopijasli1>
. Sekla kopija,li2>
, tiek izveidots, izmantojot copy.copy()>
, saglabājot augstākā līmeņa struktūru, bet kopīgojot atsauces uz iekšējiem sarakstiem. Dziļa kopija,li3>
, tiek izveidots, izmantojot copy.deepcopy()>
, kā rezultātā tiek iegūta pilnīgi neatkarīga kopijali1>
, ieskaitot visus ligzdotos elementus. Kods izdrukā ID un vērtībasli2>
unli3>
, uzsverot atšķirību starp seklajām un dziļajām kopijām atsauces un neatkarības ziņā.
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)> |
>
>
Izvade:
li2 ID: 2521878674624 Value: [1, 2, [3, 5], 4] li3 ID: 2521878676160 Value: [1, 2, [3, 5], 4]>
Kas ir dziļā kopija Python?
Dziļā kopija izveido jaunu saliktu objektu, pirms tajā rekursīvā veidā ievieto oriģinālā atrasto vienumu kopijas. Tas nozīmē vispirms izveidot jaunu kolekcijas objektu un pēc tam to rekursīvi aizpildīt ar oriģinālā atrasto pakārtoto objektu kopijām. Dziļās kopēšanas gadījumā objekta kopija tiek kopēta citā objektā. Tas nozīmē, ka jebkādas izmaiņas izgatavots uz objekta kopiju neatspoguļo oriģinālajā objektā.

Piemērs:
Iepriekš minētajā piemērā sarakstā veiktās izmaiņas neietekmēja citus sarakstus, norādot, ka saraksts ir dziļi kopēts.
Šis kods ilustrē padziļinātu saraksta kopēšanu ar ligzdotiem elementiem, izmantojotcopy>
modulis. Tas sākotnēji izdrukā oriģinālos elementusli1>
, pēc tam dziļi kopē tos, lai izveidotuli2>
. Elementa modifikācijali2>
neietekmēli1>
, kā parādīts atsevišķās izdrukās. Tas parāda, kā dziļa kopēšana rada neatkarīgu kopiju, saglabājot sākotnējā saraksta saturu pat pēc kopijā veiktajām izmaiņām.
virkne char 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> => ' '> )> |
>
>
Izvade:
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>
Kas ir seklā kopija programmā Python?
Sekla kopija izveido jaunu saliktu objektu un pēc tam atsaucas uz oriģinālā ietvertajiem objektiem tajā, kas nozīmē, ka tā izveido jaunu kolekcijas objektu un pēc tam aizpilda to ar atsaucēm uz oriģinālā atrastajiem pakārtotajiem objektiem. Kopēšanas process neatkārtojas, un tāpēc netiks izveidotas pašu pakārtoto objektu kopijas. Seklās kopēšanas gadījumā atsauce uz objektu tiek kopēta citā objektā. Tas nozīmē, ka jebkādas izmaiņas izgatavots uz objekta kopiju atspoguļojiet sākotnējā objektā. Python tas tiek īstenots, izmantojot kopēt () funkciju.

Piemērs:
Šajā piemērā sarakstā veiktās izmaiņas ietekmēja citu sarakstu, norādot, ka saraksts ir sekli nokopēts. Svarīgi punkti: Atšķirība starp seklu un dziļu kopēšanu attiecas tikai uz saliktiem objektiem (objektiem, kas satur citus objektus, piemēram, sarakstus vai klases gadījumus):
- Sekla kopija konstruē jaunu saliktu objektu un pēc tam (ciktāl iespējams) ievieto tajā atsauces uz oriģinālā atrastajiem objektiem.
- Dziļā kopija konstruē jaunu saliktu objektu un pēc tam rekursīvi ievieto tajā oriģinālā atrasto objektu kopijas.
Piemērs: Šis kods demonstrē seklu saraksta kopēšanu ar ligzdotiem elementiem, izmantojot ' copy'>
modulis. Sākotnēji tas izdrukā oriģinālos elementusli1>
, pēc tam veic seklu kopēšanu uzli2>
. Elementa modificēšanali2>
ietekmē atbilstošo elementuli1,>
jo abos sarakstos ir kopīgas atsauces uz iekšējiem sarakstiem. Tas parāda, ka sekla kopēšana rada jaunu sarakstu, bet nenodrošina pilnīgu neatkarību ligzdotajiem elementiem.
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> => ' '> )> |
>
>
SIM karte ir ievietota, bet nav android pakalpojuma
Izvade:
The original elements before shallow copying 1 2 [3, 5] 4 The original elements after shallow copying 1 2 [7, 5] 4>
IETEICAMI RAKSTI – Atšķirība starp seklo un dziļo klases kopiju