Edellisessä Luvussa: Sarjaa ja Jäädytetty Asettaa
Seuraava Luku: Toiminnot

Matala ja Syvä Kopio

Johdanto


Kuten olemme nähneet luvussa ”tietotyypit ja Muuttujat”, Python on outo käyttäytyminen verrattuna muihin ohjelmointikielet – kun osoitetaan ja kopiointi yksinkertaisia tietotyyppejä, kuten kokonaislukuja ja merkkijonoja. Ero matala ja syvä kopiointi on merkityksellinen ainoastaan yhdiste esineitä, jotka ovat esineitä, jotka sisältävät muita esineitä, kuten luetteloita tai luokan tapauksissa.,
seuraava koodi pätkä y pistettä samaan muistipaikkaan kuin X. Tämä muuttuu, kun me määrittää eri arvo y. Tässä tapauksessa y saa erillisen muistin sijainti, kuten olemme nähneet luvussa ”tietotyypit ja Muuttujat”.

>>> x = 3>>> y = x

Mutta vaikka tämä sisäinen käyttäytyminen vaikuttaa oudolta verrattuna ohjelmointikieliä kuten C, C++ ja Perl, silti havaittavissa tuloksista tehtävät vastaa odotuksiamme. Mutta se voi olla ongelmallista, jos kopioimme muuntuvia esineitä, kuten luetteloita ja sanakirjoja.
Python luo oikeita kopioita VAIN, jos sen on pakko, ts., jos käyttäjä, ohjelmoija, nimenomaisesti vaatii sitä.
Me esitellä sinulle kaikkein keskeisiä ongelmia, joita voi esiintyä, kun kopiointi vaihteleva esineitä, en.e.kun kopiointi listoja ja sanakirjoja.

Kopiointi list

>>> colours1 = >>> colours2 = colours1>>> colours2 = >>> print colours1

yllä olevassa esimerkissä yksinkertainen luettelo on määritetty colours1. Seuraavassa vaiheessa annamme värille1 värille2. Tämän jälkeen uusi lista annetaan värille2.
kuten olemme odottaneet, värien1 arvot pysyivät ennallaan., Kuten se oli meidän examplein luvussa ”tietotyypit ja muuttujat”, uusi muistipaikka oli varattu colours2, koska meillä on osoitettu kokonaan uusi lista muuttuja.

>>> colours1 = >>> colours2 = colours1>>> colours2 = "blue">>> colours1

Mutta kysymys on, mitä tapahtuu, jos muutamme osa luettelo colours2 tai colours1?
yllä olevassa esimerkissä annamme uuden arvon värin2 toiselle alkuaineelle. Monet aloittelijat hämmästyvät siitä, että myös värilista1 on ”automaattisesti” muutettu.,
selitys on, että uutta tehtävää colors2: lle ei ole ollut, vain yhdelle sen elementeistä.

Kopio Siivu Operaattori

– Se on mahdollista täysin kopioida matala lista rakenteita siivu toimija, ilman mitään haittavaikutuksia, jotka olemme edellä kuvattu:

>>> list1 = >>> list2 = list1>>> list2 = 'x'>>> print list2>>> print list1>>> 

Mutta heti kun lista sisältää alaluetteloita, meillä on sama ongelma, eli vain viitteitä thesublists.,

>>> lst1 = ]>>> lst2 = lst1

Tämä toiminta on kuvattu seuraavassa kaaviossa:

Jos voit antaa uuden arvon 0. osa yksi kaksi listaa, ei sivuvaikutus. Ongelmia syntyy, jos muutat yhden alaluettelon elementeistä.

>>> lst1 = ]>>> lst2 = lst1>>> lst2 = 'c'>>> lst2 = 'd'>>> print(lst1)]

seuraava kaavio kuvaa mitä tapahtuu, jos yksi osa on sublist on muuttunut: Molemmat sisältö lst1 ja lst2 on muuttunut.,

Menetelmällä deepcopy Moduuli kopioi

ratkaisu kuvatut ongelmat on käyttää moduuli ”kopioi”. Tämä moduuli tarjoaa menetelmän ”copy”, joka mahdollistaa täydellisen kopion OFA mielivaltainen luettelo, eli matala ja muut luettelot.
seuraava komentosarja käyttää esimerkissä ja tätä menetelmää:

from copy import deepcopylst1 = ]lst2 = deepcopy(lst1)lst2 = "d"lst2 = "c";print lst2print lst1

Jos me pelastaa tämä kirjoitus nimellä deep_copy.py ja jos me kutsumme script ”python deep_copy.,py”, saamme seuraavan tulosteen:

$ python deep_copy.py ]]

Edellisessä Luvussa: Sarjaa ja Jäädytetty Asettaa
Seuraava Luku: Toiminnot

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *