[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