Re: Copy an Object (Again?)

2006-01-07 Thread Alex Martelli
KraftDiner [EMAIL PROTECTED] wrote:
   ...
 objs = myListOfObjects
 for obj in objs:
if obj.flag:
   newObject = copy.deepcopy(obj)
   newObject.mirror()
   myListOfObjects.append(newObject)

Never modify the very list you're looping on.  I doubt this is the root
of your problem, but, at any rate, loop on a COPY of the list you're
modifying -- e.g. change the first statement to

objs = list(myListOfObjects)


Alex
-- 
http://mail.python.org/mailman/listinfo/python-list


Copy an Object (Again?)

2006-01-06 Thread KraftDiner
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.

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Copy an Object (Again?)

2006-01-06 Thread Schüle Daniel
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

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Copy an Object (Again?)

2006-01-06 Thread Ernst Noch
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.
 
Another remark, are you sure that your for obj in objs doesn't get you 
into an infinite loop?
If myListOfObjects is a normal list, your assignment

objs = myListofObjects

doesn't make a copy of the list:

  MyListOfNumbers = [1,2,3,4]
  numbs = MyListOfNumbers
  MyListOfNumbers.append(5)
  numbs
[1, 2, 3, 4, 5]

If anything, that makes your alorithm hard to read, because you are 
iterating over a list while appending to it.

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Copy an Object (Again?)

2006-01-06 Thread Schüle Daniel
I was not very clear about it

 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

even when x=X() and y=copyItSomehowFrom(x)
what is supposed to be copied?
the whole file? but where?

in your case .. what is supposed to happen with the mirrored image?
should it be mirrored inplace
if I recall properly in import PIL.Image as image if you image.open
an image and want to mirror it you can create a real copy
and then save as  it into a file

my 2 cents

-- 
http://mail.python.org/mailman/listinfo/python-list