The following behavior is very confusing to me.
I define a program
def test(a):
b=a
b = a^2
return b
Then if I assign
x = 2
and then execute
test(x)
4
I get x squared and x unchanged:
x
2
However suppose now that I want the same on a single
element of a matrix and define
def testmatrix(a):
b=a
b[1,1] = a[1,1]^2
return b
Then I set
m = identity_matrix(2)*2
Thus:
m
[2 0]
[0 2]
Now with
testmatrix(m)
[2 0]
[0 4]
I get what I wanted, but...
now also m is changed !
m
[2 0]
[0 4]
Outside the program !
I expected m to be
[2 0]
[0 2]
the same before the program executed.
The problem is solved by changing the program to
def testmatrix(a):
b=a.copy()
b[1,1] = a[1,1]^2
return b
However, it is confusing to have a function with local variable a
that returns another variable b locally equal to a and changes
the value of a outside the function.
-- Giovanni
--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/sage-support
URLs: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---