list parameter of a recursive function

TP Tribulations at Paralleles.invalid
Wed Oct 6 15:22:35 EDT 2010


Hi,

I have a function f that calls itself recursively. It has a list as second 
argument, with default argument equal to None (and not [], as indicated at:
http://www.ferg.org/projects/python_gotchas.html#contents_item_6 )

This is the outline of my function:

def f ( argument, some_list = None ):

   if some_list == None:
      some_list = []
   [...]
   # creation of a new_argument
   # the function is called recursively only if some condition is respected
   if some_condition:
      some_list.append( elem )
      f( new_argument, some_list )
   # otherwise, we have reached a leaf of the a branch of the recursive tree
   # (said differently, terminal condition has been reached for this branch)
   print "Terminal condition"

The problem is that when the terminal condition is reached, we return back 
to some other branch of the recursive tree, but some_list has the value 
obtained in the previous branch!
So, it seems that there is only one some_list list for all the recursive 
tree.
To get rid of this behavior, I have been compelled to do at the beginning of 
f:

import copy from copy
some_list = copy( some_list )

I suppose this is not a surprise to you: I am compelled to create a new 
some_list with the same content.
So, if I am right, all is happening as if the parameters of a function are 
always passed by address to the function. Whereas in C, they are always 
passed by copy (which gives relevance to pointers).

Am I right?

Julien

-- 
python -c "print ''.join([chr(154 - ord(c)) for c in '*9(9&(18%.\
9&1+,\'Z4(55l4('])"

"When a distinguished but elderly scientist states that something is
possible, he is almost certainly right. When he states that something is
impossible, he is very probably wrong." (first law of AC Clarke)



More information about the Python-list mailing list