Johdanto

tässä opetusohjelmassa, aiomme keskustella matala kopioita vs syvä kopioiden avulla esimerkkejä Python. Me kattaa määritelmän syvä ja matala kopio, sekä sen täytäntöönpanon Python-kielen arvioida core erot välillä kaksi kappaletta.

monet ohjelmat, jotka me kirjoittaa, ei väliä kuinka perus-he ovat, me päätyä tarvitsevat kopioida luettelon tai objekti on yksi monista syistä, kuten laskennallisen tehokkuuden., Siihen on kaksi tapaa, joko tehdä syvä kopio tai pinnallinen kopio. Ennen kuin keskustelemme näiden kahden välisistä eroista, meidän on ensin ymmärrettävä, mitä syviä ja pinnallisia kopioita tarkalleen ottaen on.

Syvä Kappaletta Python

syvä kopio tekee uuden ja erillisen kopion koko objekti tai lista, jolla on oma ainutlaatuinen muisti osoite. Tämä tarkoittaa sitä, että kaikki muutokset, joita teet objektin/luettelon uudessa kopiossa, eivät heijasta alkuperäistä. Tämä prosessi tapahtuu luomalla ensin uusi luettelo tai esinettä, jonka jälkeen rekursiivisesti kopioimalla osia alkuperäisestä uuteen.,

lyhyesti sanottuna, molemmat esineet ovat täysin toisistaan riippumattomia. Tämä on samanlainen käsite siirtää arvoa kielillä, kuten C++, Java, ja C#.

Deep Copy Example

Syväkopioiden käsitteen toteuttamiseksi Pythonissa käytämme kopiomoduulia.

sanotaan, että meillä on luettelo luettelot kutsutaan result_A, joka sisältää laatuja opiskelija 3 aiheista kaksi ensimmäistä vuotta koulussa, ja haluamme luoda täsmälleen samanlainen tulosluettelon opiskelija B samoin., Yritämme ja tehdä syvä kopio result_A luettelo, ja tehdä muutamia muutoksia, että syvä kopio myöhemmin näyttää laadut opiskelija B.

Esimerkki 1:

kirjoitus edellä, käytämme deepcopy tapa copy moduuli kopioida list result_A ja result_B. Seuraavaksi tulostamme molempien listojen sisällön ruudulla.

Lähtö:

, ], ]

kuten näet, listat ovat identtiset. Myöhemmin tässä artikkelissa nähdään, miten tämä eroaa pinnallisista kopioista.,

Matala Kappaletta Python

matala kopio tekee myös erillinen uusi esine, objekti tai lista, mutta kopioinnin sijaan lapsi elementtejä uusi esine, se yksinkertaisesti kopioi viittaukset niiden muisti osoitteita. Jos siis teet muutoksen alkuperäiseen objektiin, se heijastuisi kopioituun objektiin ja päinvastoin. Lyhyesti sanottuna, molemmat kopiot ovat riippuvaisia toisistaan. Tämä on samanlainen käsite kulkee viittauksella ohjelmointikielissä kuten C++, C#, ja Java.,

Matala Kopio Esimerkki

toteuttaa tämän Python, käytämme copy module uudelleen, mutta tällä kertaa soitamme sen copy toiminto.

Let ’ s käyttää samaa esimerkkiä lista matala kopio esimerkiksi sekä.

Esimerkki 2:

# Program 2 - Shallow Copyimport copyresult_A = , ]result_B = copy.copy(result_A)print(result_A)print(result_B)

kirjoitus edellä, käytämme copy tapa copy moduuli tehdä matala kopio list result_A jotka nimesimme result_B., Seuraavaksi molempien listojen sisältö on painettu konsoliin.

Lähtö:

, ], ]

jälleen listat ovat odotetusti samat. Seuraavaksi selitän ero tuloksia saamme copy ja deepcopy toiminnot.

Ero Syvä ja Matala Kopioita

Nyt kun olemme keskustelleet, mitä matala ja syvä kopiot ovat ja miksi me luoda kopioita, se on aika puhua siitä, mitä eroa niiden välillä., Pohjimmiltaan, on olemassa vain kaksi core eroja ja ne ovat sidoksissa toisiinsa:

  1. Syvä kopio tallentaa kopiot objektin arvot, kun taas matala kopio tarinoita viittaukset alkuperäiseen muisti osoite
  2. Syvä kopio ei heijasta muutoksia tehty uusi/kopioida objektin alkuperäisen objektin; ottaa huomioon, että matala kopio ei

Ennen kuin siirrymme toteuttamista, Haluan sinun kuvittele tämä skenaario. Sanotaan, että kaksi ihmistä haluaa jakaa drinkin; heillä on kaksi tyhjää lasia ja kaksi pilliä., He voivat jakaa tämä juoma kahdella tavalla:

  1. Laita juoda yksi lasi, ja laittaa sekä olkea että lasi jakaminen
  2. Laita juoma sekä lasit, ja laita yksi pisara kussakin lasi

ensimmäinen skenaario on, että matala kopio. Molemmat muuttujat / instanssit osoittavat / käyttävät samaa muistipaikkaa toiminnassaan. Toinen skenaario on syvä kopio. Molemmat muuttujat / instanssit osoittavat / käyttävät kahta eri muistipaikkaa toiminnassaan.,

Vertailu Esimerkki

tehdä ero selvä, katsotaanpa käyttää tätä tietoa meidän edellä kaksi esimerkkiä, alkaen Esimerkki 1.

Edellä, olemme luoneet luettelo result_A ja teki syvän kopio nimeltä result_B. Yritetään muuttaa sisältöä result_B ja katso jos se on mitään vaikutusta sisältö result_A.

tuloksena on:

Original List:, ]Deep Copy:, ]

odotettu tulos on, että alkuperäinen lista pysyy ennallaan., Deep Copyn muutokset eivät vaikuttaneet alkuperäiseen listaan.

nyt, kokeillaan samaa esimerkkiä 2-Shallow Copy.

Lähtö:

Original List:, ]Shallow Copy:, ]

tässä odotettu lopputulos on, että sekä alkuperäistä listaa että kopioitua listaa muutetaan singlemuutoksen jälkeen. Ja kuten näette, jolloin muutos matala kopio johtanut siihen, että muutos heijastuu alkuperäinen luettelo kuin hyvin.

Johtopäätös

tässä postitse, me puhuimme siitä, miten matala ja syvä kopio on ja miten voimme tehdä niistä Python kieli käyttämällä ”kopio” – moduuli., Käytimme kaksi sen toiminnot eli copy ja deepcopy tehdä matala ja syvä kappaletta, vastaavasti. Lisäksi keskustelimme kaksi keskeistä eroja matala ja syvä kopio, ja myös toteutettu matala ja syvä kopio python ymmärtää nämä erot paremmin.