codul Sursa: Lib/copy.py
Misiunea declarații în Python nu copia obiecte, acestea creează bindingsbetween o țintă și un obiect. Pentru colecțiile care sunt mutabile sau conținutmutabile, uneori este nevoie de o copie, astfel încât să se poată schimba o copie fără să se schimbe cealaltă. Acest modul oferă copyoperations generice superficiale și profunde (explicate mai jos).
Interfață rezumat:
copy.
copy
(x)¶
Returna o copie superficială a x.,
copy.
deepcopy
(x)¶
Returna o copie profundă a lui x.
excepție copy.
error
¶
Ridicat pentru module specifice erori.
diferența între suprafață și adâncime copierea este relevant doar pentru compoundobjects (obiecte care conțin alte obiecte, cum ar fi liste sau cazuri de clasă):
-
O copie superficială construiește un nou compus obiect și apoi (la extentpossible) inserează referințe de obiecte găsite în original.,
-
o copie profundă construiește un nou obiect compus și apoi, recursiv, introduce în el obiecte găsite în original.două probleme există adesea cu operații de copiere profundă care nu există cu operații de copiere superficială:
-
obiecte Recursive (obiecte compuse care, direct sau indirect, conțin areferență pentru ele însele) pot provoca o buclă recursivă.deoarece deep copy copiază tot ce poate copia prea mult, cum ar fi datacare este destinat să fie partajat între copii.,
deepcopy()
funcția evită aceste probleme prin:-
menținându-un
memo
dicționar de obiecte deja copiate în timpul currentcopying trece; și -
lasă definite de utilizator clase suprascrie copierea operațiune sau set ofcomponents copiat.
acest modul nu copiază tipuri cum ar fi modulul, metoda, urmărirea stivei, cadrul stivei,fișierul, soclul, fereastra, matricea sau orice alte tipuri similare., Nu „copie” funcții andclasses (superficial și profund), prin revenirea la obiectul original neschimbat; acesta este compatibil cu modul în care acestea sunt tratate de către
pickle
module.clasele pot folosi aceleași interfețe pentru a controla copierea pe care o folosesc pentru controlpickling. Consultați descrierea modulului
pickle
pentru informații despre acestemetode. În fapt,copy
modul foloseste registeredpickle funcții decopyreg
module.,pentru ca o clasă să își definească propria copie de implementare, se poate definespecial metode
__copy__()
și__deepcopy__()
. Primul este chematpentru a implementa operația de copiere superficială, nu sunt transmise argumente suplimentare.Acesta din urmă este chemat să implementeze operația de copiere profundă; este transmis peargument, dicționarulmemo
., Dacă__deepcopy__()
punerea în aplicare trebuie să facă o copie profundă a unei componente, aceasta ar trebui să sunațideepcopy()
functionwith componenta ca primul argument și memo dicționar ca al doilea argument.a se vedea, de asemenea,
modul
pickle
discutarea metodelor speciale utilizate pentru a sprijini obiect de stat de recuperare șirestaurare.
-
Lasă un răspuns