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:
- Syvä kopio tallentaa kopiot objektin arvot, kun taas matala kopio tarinoita viittaukset alkuperäiseen muisti osoite
- 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:
- Laita juoda yksi lasi, ja laittaa sekä olkea että lasi jakaminen
- 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.