[PyKDE] Deep copy

Vio vmilitaru at sympatico.ca
Tue Jul 22 20:29:01 BST 2003


If I follow your thought, there is no shrink-wrapped solution for this. 
I think I'd be tempted to then follow the "__dict__" route, see where it 
leads, something like:

def cloneObj(obj):
    cloneObj = obj.__class__()
    for name, val in obj.__dict__.iteritems():
    if not str(type(val)) in (
       "<type 'sip.wrapper'>",

       ... other types 'copy' module can't deepcopy :-(

       ):
          val = copy.deepcopy(val)
       setattr(cloneObj, name, val)
    return cloneObj

Thanks for your input,
Vio



Phil Thompson wrote:

>On Tuesday 22 July 2003 2:18 am, 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.
>>
>>Now is there an easy way to make 'deep copies' of PyQt objects? The
>>assignment operator '=' only makes so-called 'shallow' copies, which are
>>simple references to an object. I need real duplicate objects, which are
>>independent of each other (modifying one copy should have no affects on
>>the other copies).
>>
>>So what are my options besides manually reconstructing the object
>>(calling the PyQt constructor and copying each data element into the new
>>instance sounds costly)? And python's 'copy' module unfortunately chokes
>>on objects:
>>"copy.deepcopy(obj)" bombs unfortunately:(
>>
>>Or are there better ways of achieving this.
>>    
>>
>
>You can't do it. For one thing, there is no mechanism to invoke the copy ctor 
>of the underlying C++ instance. Secondly many (most?) Qt classes are designed 
>not to be copied - they have declared private copy ctors and assignment 
>operators.
>
>Phil
>
>  
>





More information about the PyQt mailing list