Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1776 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  copy.copy(obj) vs obj.copy()

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

copy.copy(obj) vs obj.copy()

n°2095826
suizokukan
Posté le 17-08-2011 à 22:23:33  profilanswer
 

Bonjour,
je me demande quelles sont les différences entre ces deux méthodes de copie d'objet :

Code :
  1. class C(obj):
  2.     def __init__(self, a,b):
  3.         self.a = a
  4.         self.b = b
  5.     def mycopy(self):
  6.         return C(self.a, self.b)
  7. c = C( a=1, b=2 )
  8. # 1ère méthode :
  9. new_obj = c.mycopy()
  10. # 2ème méthode :
  11. import copy
  12. new_obj = copy.copy( c )


Merci de votre aide !
 
edit : copy.deepcopy -> copy.copy


Message édité par suizokukan le 17-08-2011 à 23:15:55

---------------
rule #1 : trust the python
mood
Publicité
Posté le 17-08-2011 à 22:23:33  profilanswer
 

n°2116721
mistera
TuxBoy
Posté le 14-12-2011 à 23:17:34  profilanswer
 

Le résultat est le même mais la seconde solution est bien plus simple à écrire et à maintenir.
 
Pour obtenir le même résultat avec la première méthode, il faut que ta méthode mycopy() liste tous les attributs de ta classe (peut devenir fastidieux s'il y en a beaucoup) et surtout doit réaliser l'opération de manière récursive sur tous les attributs complexes. Explication:
 

c = C(a=1, b=2)
new_obj = c.mycopy() # OK: la copie est complète
 
c1 = C(a=1, b=2)
c2 = C(a=1, b=c1)
new_obj = c2.mycopy() # La copie est partielle: l'attribut b n'est pas copié


 
Dans la deuxième situation, la copie n'est pas réalisé pour l'attribut b, en voici la preuve en affichant les id des objets:
 

>>> print id(c1)
140459192950864
>>> print id(c2)
140459192950936
>>> print id(new_obj)
140459192951008
>>> print id(new_obj.b)
140459192950864


 
On voit bien que c1 et new_obj.b indiquent le même objet (même id): la copie doit être réalisée de manière récursive. C'est ce que fait copy.copy() (et probablement plus rapidement par dessus le marché)

n°2121079
suizokukan
Posté le 12-01-2012 à 21:11:33  profilanswer
 

> Merci mistera pour ta réponse qui recoupe l'opinion que j'avais finis par me faire.


---------------
rule #1 : trust the python

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  copy.copy(obj) vs obj.copy()

 

Sujets relatifs
Macro onClick copy/paste Excelsvn: 'C:\machin is already a working copy for a different URL
template de déclaration d'un copy-constructeur en friend (combo \o/)copy() ne fonctionne pas car safe_mode ON
SQL COPY PostgresSVN: checkout dans le dossier d'un working copy
Copy cellulebanaliser un &copy
commande copy ou xcopy[Javascript] Effectuer une copie profonde (deep copy) d'objets
Plus de sujets relatifs à : copy.copy(obj) vs obj.copy()


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR