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 de copyreg 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ționarul memo., Dacă __deepcopy__() punerea în aplicare trebuie să facă o copie profundă a unei componente, aceasta ar trebui să sunați deepcopy() functionwith componenta ca primul argument și memo dicționar ca al doilea argument.

    a se vedea, de asemenea,

    modulpickle

    discutarea metodelor speciale utilizate pentru a sprijini obiect de stat de recuperare șirestaurare.