strange list behavior
Sean Blakey
sblakey at freei.net
Tue Jun 6 15:13:05 EDT 2000
More information about the Python-list mailing list
Tue Jun 6 15:13:05 EDT 2000
- Previous message (by thread): [ANNOUNCE] Pyro 1.2 - distributed objects
- Next message (by thread): strange list behavior
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Tue, Jun 06, 2000 at 06:50:16PM +0000, Stefan Seefeld wrote: > I'v run into a strange problem with lists. I'm not sure > at all where the problem is so I'll provide some context: > [snip] > class Visitor: > def visitDeclarator(self, node): > name = self.scope() > name.append(node.identifier()) > self.__result_declarator = AST.Declarator(name) > def visitModule(self, node): > name = self.scope() > name.append(node.identifier()) > module = AST.Module(name) > #... > > what I *though* was happening is that I created temporary variables 'name' > in the respective scopes of all the visitSomething methods and then hand over > the objects to the newly created Node types (Module, Declarator, etc.) > However, what I *observe* is that even though a Module is initialized with > name : ['foo', 'bar'] > it may end up being > name : ['foo', 'baz'] > i.e. it seems the list is not properly released but instead modified from the outside. > printing out 'id(name)' reveals indeed that the various temporary 'name' objects > in the Visitor class have all the same id, i.e. they are the same object. Given > that the AST nodes are created with the list copied by reference, not by value, > I should not wonder that the value changes. Is this a fault of GC ? > > Could anybody explain what's going on here and how I get the behavior I want ? > Thanks a lot ! > > Stefan > > _______________________________________________________ > > Stefan Seefeld > Departement de Physique > Universite de Montreal > email: seefelds at magellan.umontreal.ca > > _______________________________________________________ > > ...ich hab' noch einen Koffer in Berlin... > -- > http://www.python.org/mailman/listinfo/python-list It looks like what is happening is that your self.scope() method is returning a reference to an existing list instead of a new list. You do not provide any code for your scope() method so I cannot verify this, but I would guess that you are doing something like this: def scope(self, default_scope=[]): # manipulate default_scope here return default_scope When you use a mutable object as the default argument of a function or method in python, that object is only initialized once. Each call to self.scope() will return a reference to the same list. -Sean -- Sean Blakey, sblakey at freei.com Software Developer, FreeInternet.com (253)796-6500x1025 It is easier to change the specification to fit the program than vice versa.
- Previous message (by thread): [ANNOUNCE] Pyro 1.2 - distributed objects
- Next message (by thread): strange list behavior
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list