Copy an Object (Again?)

Schüle Daniel uval at rz.uni-karlsruhe.de
Fri Jan 6 14:58:21 EST 2006


KraftDiner wrote:
> I'm having trouble getting a copy of and object... (a deep copy)
> 
> I'm writing a method that creates a mirror image of an object (on
> screen)
> In order to do this i need to get a copy of the object and then modify
> some
> of its attributes.
> 
> I tried:
> objs = myListOfObjects
> for obj in objs:
>    if obj.flag:
>       newObject = copy.deepcopy(obj)
>       newObject.mirror()
>       myListOfObjects.append(newObject)
> 
> That doesn't seem to work.. the new object seems to disapear from
> existance.
> I'm wondering if its a bug in my application or if this is my shallow
> understanding of the language.
> 
> TIA
> B.
> 

I think you should provide more code, eg what attributes does your 
object have?
imagine the situation like this

 >>> import copy
 >>> class A:
...     lst=[1, 2, 3]
...
 >>> a=A()
 >>> b=copy.deepcopy(a)
 >>> a
<__main__.A instance at 0x403e3c8c>
 >>> a.lst
[1, 2, 3]
 >>> b.lst
[1, 2, 3]
 >>> b.lst.append(4)
 >>> b.lst
[1, 2, 3, 4]
 >>> a.lst
[1, 2, 3, 4]

or even if you "could" copy instances

class X:
	def __init__(self, filename = "/path/file")
		self.file = file(filename, "w+")
	def modifyByteAt(offset):
		self.file.tell(offset)
		self.file.write("X")

this is untested pseudocode, it should only give you an idea

hth, Daniel

ps:
question to all
what is a general approach to copy class instances?
write own method or is there some __magic__ attribute or
should one use pickle.dump?

Regards, Daniel




More information about the Python-list mailing list