Sisään Python , Assignment-käskyt eivät kopioi objekteja, vaan luovat sidoksia kohteen ja objektin välille. Kun käytämme = operaattori, Se luo vain uuden muuttujan, joka jakaa alkuperäisen objektin viitteen. Luodaksemme oikeita kopioita tai klooneja näistä objekteista voimme käyttää kopiomoduulia Python .
Python Deepcopyn syntaksi
Syntaksi: copy.deepcopy(x)
Python Shallowcopyn syntaksi
Syntaksi: kopioi.kopio(x)
Esimerkki:
Näiden kopioiden tekemiseen käytämme kopiointimoduulia. Copy() palauttaa matalan kopion luettelosta ja deepcopy() palauttaa syvän kopion luettelosta. Kuten näet, molemmilla on sama arvo, mutta niillä on eri tunnukset.
Esimerkki: Tämä koodi esittelee käytöncopy>moduuli luodaksesi sekä matalia että syviä kopioita sisäkkäisestä luettelostali1>. Matala kopio,li2>, luodaan käyttämällä copy.copy()> , säilyttäen ylimmän tason rakenteen, mutta jakamalla viittaukset sisäisiin luetteloihin. syvä kopio,li3>, luodaan käyttämällä copy.deepcopy()> , jolloin tuloksena on täysin itsenäinen kopioli1>, mukaan lukien kaikki sisäkkäiset elementit. Koodi tulostaa tunnukset ja arvotli2>jali3>, joka korostaa eroa matalan ja syvän kopioiden välillä referenssin ja riippumattomuuden kannalta.
Python 3
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)> |
>
>
Lähtö:
li2 ID: 2521878674624 Value: [1, 2, [3, 5], 4] li3 ID: 2521878676160 Value: [1, 2, [3, 5], 4]>
Mikä on syväkopio Pythonissa?
Syväkopio luo uuden yhdistetyn objektin ennen kuin siihen lisätään kopioita alkuperäisestä löytyneistä kohteista rekursiivisesti. Se tarkoittaa, että ensin rakennetaan uusi kokoelmaobjekti ja sitten täytetään se rekursiivisesti alkuperäisen aliobjektien kopioilla. Jos kyseessä on syväkopio, objektin kopio kopioidaan toiseen objektiin. Se tarkoittaa sitä mitään muutoksia tehty kopiolle esineestä eivät heijastu alkuperäiseen esineeseen.
Esimerkki:
Yllä olevassa esimerkissä luetteloon tehty muutos ei vaikuttanut muut luettelot, mikä osoittaa, että luettelo on syvästi kopioitu.
Tämä koodi havainnollistaa sisäkkäisiä elementtejä sisältävän luettelon syvällistä kopiointia käyttämälläcopy>moduuli. Se tulostaa aluksi alkuperäiset elementitli1>, ja sitten syväkopioi ne luodakseenli2>. Muutos elementtiinli2>ei vaikutali1>, kuten erilliset tulosteet osoittavat. Tämä korostaa, kuinka syväkopiointi luo itsenäisen kopion, joka säilyttää alkuperäisen luettelon sisällön myös kopioon tehtyjen muutosten jälkeen.
java lukea csv-tiedostoa
Python 3
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>=>' '>)> |
>
>
Lähtö:
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>
Mikä on matala kopio Pythonissa?
Matala kopio luo uuden yhdistelmäobjektin ja viittaa sitten alkuperäisen sisällä oleviin objekteihin, mikä tarkoittaa, että se rakentaa uuden kokoelmaobjektin ja täyttää sen sitten viittauksilla alkuperäisessä olevaan aliobjektiin. Kopiointiprosessi ei toistu, joten se ei luo kopioita itse aliobjekteista. Jos kyseessä on matala kopio, objektin viittaus kopioidaan toiseen objektiin. Se tarkoittaa sitä mitään muutoksia tehty esineen kopioksi heijastaa alkuperäisessä esineessä. Pythonissa tämä toteutetaan käyttämällä kopio() toiminto.
Esimerkki:
Tässä esimerkissä luetteloon tehty muutos vaikutti toinen luettelo, mikä osoittaa, että luettelo on kopioitu pinnallisesti. Tärkeitä kohtia: Ero matalan ja syvän kopioinnin välillä koskee vain yhdistelmäobjekteja (objekteja, jotka sisältävät muita objekteja, kuten luetteloita tai luokkaesiintymiä):
- Matala kopio rakentaa uuden yhdistetyn objektin ja sitten (mahdollisuuksien mukaan) lisää siihen viittauksia alkuperäisestä löytyneisiin objekteihin.
- Syväkopio rakentaa uuden yhdistetyn objektin ja lisää siihen sitten rekursiivisesti kopioita alkuperäisestä löytyneistä objekteista.
Esimerkki: Tämä koodi näyttää matalan kopioinnin luettelosta, jossa on sisäkkäisiä elementtejä ' copy'> moduuli. Aluksi se tulostaa alkuperäiset elementitli1>, suorittaa sitten matalan kopioinnin sisäänli2>. Elementin muokkaaminen sisäänli2>vaikuttaa vastaavaan elementtiinli1,>koska molemmilla listoilla on viittaukset sisäisiin luetteloihin. Tämä osoittaa, että matala kopiointi luo uuden luettelon, mutta se ei tarjoa täydellistä riippumattomuutta sisäkkäisille elementeille.
Python 3
kuinka int muunnetaan merkkijonoksi java
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>=>' '>)> |
>
>
Lähtö:
The original elements before shallow copying 1 2 [3, 5] 4 The original elements after shallow copying 1 2 [7, 5] 4>
SUOSITELTUJA ARTIKKELIA – Ero luokan matalan ja syvän kopion välillä