Lähde koodi: Lib/copy.py
Tehtävän lausuntoja Python älä kopioi esineitä, ne luovat bindingsbetween tavoite ja kohde. Kokoelmiin, jotka ovat mutable tai containmutable kohteita, kopio on joskus tarpeen, jotta yksi voi muuttaa yhden kopion muuttamatta toista. Tämä moduuli tarjoaa yleisiä matalia ja syviä kopiotoimintoja (selitetty alla).
Interface yhteenveto:
copy.
copy
(x)¶
Paluu matala kopio x.,
copy.
deepcopy
(x)¶
Paluu syvä kopio x.
ottamatta copy.
error
¶
Nosti module erityisiä virheitä.
eroa on matala ja syvä kopiointi on merkitystä vain compoundobjects (esineet, jotka sisältävät muita esineitä, kuten luetteloita tai luokan tapauksissa):
-
matala kopio rakentaa uusi yhdiste objekti, ja sitten (sen extentpossible) lisää viittauksia siihen, että esineitä löytyy alkuperäinen.,
-
syvä kopio rakentaa uusi yhdiste objektia ja sitten rekursiivisesti, insertscopies siihen, että esineitä löytyy alkuperäinen.
Kaksi ongelmaa usein olemassa syvä kopioida toimintaa, että ei ole olemassa kanssa shallowcopy toiminnot:
-
Rekursiivinen esineitä (yhdiste esineitä, jotka suoraan tai välillisesti sisältävät areference itse) voi aiheuttaa rekursiivinen silmukka.
-
koska deep copy Kopioi kaiken, mitä se saattaa kopioida liikaa, kuten datajohka on tarkoitus jakaa kopioiden kesken.,
deepcopy()
toiminto välttää näitä ongelmia:
-
pitäminen
memo
sanakirja esineitä jo kopioitu aikana currentcopying pass; ja -
anna käyttäjän määrittämä luokat ohittaa kopiointi toiminnan tai asettaa ofcomponents kopioida.
Tämä moduuli ei kopioida tyypit kuten moduuli, menetelmä, stack trace, pino runko -, tiedosto -, pistorasia -, ikkuna -, array -, tai muita vastaavia tyyppejä., Se ei ”kopioi” – toiminnot andclasses (pinnallinen ja syvästi), palauttamalla alkuperäisen objektin ennallaan; tämä yhteensopiva, miten nämä kohtelevat pickle
moduuli.
luokat voivat käyttää samoja rajapintoja valvoakseen kopiointia, jota ne käyttävät kontrolloidakseen. Katso moduulin pickle
kuvauksesta lisätietoja näistä menetelmistä. Itse asiassa, copy
moduuli käyttää registeredpickle toiminnot copyreg
moduuli.,
jotta luokan määritellä oma kopio täytäntöönpanoon, se voi definespecial menetelmät __copy__()
ja __deepcopy__()
. Ensin mainittua kutsutaan toteuttamaan pinnallinen kopiointioperaatio; lisäperusteluja ei esitetä.Jälkimmäistä kutsutaan deep copy-operaation toteuttamiseksi; se kulkee oneargumentissa, sanakirjassa., Jos __deepcopy__()
täytäntöönpanon vuoksi tehdä syvä kopio komponentti, se pitäisi soittaa deepcopy()
functionwith komponentti kuin ensimmäinen argumentti ja memo sanakirja kuten toinen väite.
Katso myös
Moduuli pickle
Keskustelua erityisiä menetelmiä käytetään tukemaan objektin tila haku andrestoration.
Vastaa