royG wrote: > hi > i am trying to rename extension of files in a directory..as an initial > step i made a method in > > class ConvertFiles: > def __init__(self,infldr,outfldr): > self.infldr=infldr > self.outfldr=outfldr > self.origlist=os.listdir(infldr) > .... > def renamefiles(self,extn): > for x in self.origlist: > x=x+"."+extn > > ... > > later when i print self.origlist i find that the elements of list are > unchanged..even tho a print x inside the renamefiles() shows that > extn is appended to x .. > why does this happen?
Because a piece of code like this x = some_list[index] x = something_else() doesn't change the object itself, just rebinds x to a new object. That the old object stored in x happened to be referenced in a list as well - who cares? So either your members of origlist become mutables - then you have to alter them, and then they will be reachable from the list. Like this: class Foo(object): def __init__(self): pass l = [Foo() for _ in xrang(10)] f = l[0] f.bar = "baz" print l[0].bar Or you rebind the list itself, or it's index under work - like this: for i, item in enumerate(l): l[i] = do_something_with_item(item) or new_l = [] for item in l: new_l.append(do_something(item)) l = new_l There are innumerable variations of this scheme. Diez -- http://mail.python.org/mailman/listinfo/python-list