Yes, some kind of property list comprising everything that makes the target object "unique" or distinct from a freshly constructed one - let's call it the object's DNA - may be the way to go. So deepcopying an object then becomes a 2 stages process:

1. create a new object with 'default' attributes

cloneObj = obj.__class__()

assuming all goes well here :)

2. Apply the attributes which makes the target object unique from a 'default' one. Well, this obviously doesn't sound too complicated to code, only it's "costly" for me, your average "lazy coder", which has to figure out what maked each object "deviate from default values".
Hmm, or how about something like this perhaps, which only looks for 'deviations from the norm' and deepcopies that:


def cloneObj(obj):

   dictO = {} # 'O' stands for 'original' :)
   for name, val in obj.__dict__.iteritems():
       dictO.update({name : val})

   # this should give me a new instance with default attributes
   clone = obj.__class__() # assuming no problems here :)

   # let's get lazy
   for name, val in obj.__dict__.iteritems():
      if val != dict[name]:

         # found something unique - deepcopy it
         try:
             val = copy.deepcopy(dict[name])
         except:
            print 'DAMN>',name,val,dict[name]

          setattr(clone, name, val)
   return clone


Ok, I don't know if this will bomb or what, time to try it now. V.






Frederick Polgardy Jr wrote:


On Monday 21 July 2003 08:18 pm, Vio wrote:


Hi,
I need to implement copy/cut/paste of whole Pyqt objects. This
apparently requires 'deep copies' of a target object: one initial
copy used as the 'clipboard' object (my cookie-cutter), then all
other copies created by 'deep-copying' the clipboard object.



Why not "cut" or "copy" into some kind of property map which you can use for construction of new objects? You wouldn't necessarily need a prototype "clipboard" object, though it would probably suffice. I wonder how much help you can elicit from the introspection attributes (__dict__, etc.) to aid in your cause. Clearly, what you want are the "simpler" attributes (numbers, strings, rects, colors, etc.), not things like handles or references, which are either unique, or totally unimportant.


Also how much of this "copy construction" are you doing, that construction and member copying on the new instance would be so costly? Cut/copy/paste is normally a human-time operation, and no human is going to be able to tell the difference.

Good luck....
Fred






_______________________________________________
PyKDE mailing list    [EMAIL PROTECTED]
http://mats.imk.fraunhofer.de/mailman/listinfo/pykde

Reply via email to