17.12.2012 Views

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

copy<br />

Principaux modules, partie 2<br />

CHAPITRE 9<br />

copy fournit deux fonctions, copy() et deepcopy(), qui permettent de recopier le<br />

contenu d’un objet dans un clone. La première effectue une shallow copy et la seconde<br />

une deep copy.<br />

Une shallow copy crée un second objet et y recopie les liens vers les objets qui composent<br />

les attributs de l’objet originel. En d’autres termes, ces deux objets partagent<br />

les mêmes attributs en mémoire.<br />

Une deep copy, quant à elle, recopie complètement les objets. Le nouvel objet<br />

devient donc totalement indépendant.<br />

copy, comme pickle, est basée sur une lecture de __dict__. Elle est donc réservée<br />

aux manipulations d’instances de données et ne permet pas de recopier les objets de<br />

types fonctionnels comme :<br />

les modules ;<br />

les classes ;<br />

les fonctions ;<br />

les fichiers ;<br />

les sockets, ...<br />

copy() et deepcopy() sont dans un bateau<br />

>>> class T(object):<br />

... def __init__(self):<br />

... self.t = [1, 2]<br />

...<br />

>>> t = T()<br />

>>> from copy import copy, deepcopy<br />

>>> t2 = copy(t)<br />

>>> t2.t<br />

[1, 2]<br />

>>> t2.t.append(3)<br />

>>> t2.t<br />

[1, 2, 3]<br />

>>> t.t<br />

[1, 2, 3]<br />

>>> t3 = deepcopy(t)<br />

>>> t3.t.append(4)<br />

>>> t3.t<br />

[1, 2, 3, 4]<br />

>>> t.t<br />

[1, 2, 3]<br />

295

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!