[Numpy-discussion] bug or feature?

Travis Oliphant oliphant at ee.byu.edu
Thu Feb 8 17:01:36 EST 2007


humufr at yahoo.fr wrote:

>I have a big problem with numpy, numarray and Numeric (all version)
>
>If I'm using the script at the bottom, I obtain these results:
>
>var1 before function is  [3 4 5]
>var2 before function is  1
>var1 after function must be [3 4 5] is  [ 9 12 15]     <------ problem
>var2 after function must be 1 is  1
>var3 must be the [9 12 15] is  [ 9 12 15]
>var4 must be the 'toto' is  toto
>
>
>I'm very surprised by the line noted. I always thinking that the input 
>variable didn't change the variable itself outside the function.
>
To save yourself confusion, you need to understand the difference 
between mutable and immutable types.  Mutable types can be changed 
inside of a function call.

You also need to understand that = is a "name-binding operation only"  
it does not change objects.

>Is it normal and so do I have to do a copy of the input data each time I'm 
>calling a function? 
>  
>
Yes, it's very normal, if your function does an "in-place" operation on 
a mutable type.

Consider the following code:

def test(var1, var2):
      var1[0] *= 3  # this accesses the 0'th element of var1 and alters it.
      var2 = 'toto'  # this makes a new object and names it with var2
                            # whatever was passed in is gone
      return var1, var2

test([1,2,3],[1,2])

will return

[3,2,3], 'toto'



-Travis




More information about the NumPy-Discussion mailing list