Hi Alex, On Sat, Jul 4, 2009 at 6:07 PM, Alex<[email protected]> wrote: > > Hi, > > The following assignment behaves unexpectedly: > > a=matrix(2) #makes a zero matrix > b=a > b[0,1]=2 > > One would expect a to stay zero, and only b to change to [0 2 0 0], > but a changes as well!
That is expected, as it is a Python issue, not an issue with Sage. In the above code sample, both a and b refer to the same object. What you want is to make a copy of the object that a refers to. > Is there a way to leave a fixed when changing b? Yes. Use the command copy() or deepcopy(). In the following session, I make a copy of the matrix A. In this way, changing the copy doesn't affect the original object that A refers to. ---------------------------------------------------------------------- | Sage Version 4.0.2, Release Date: 2009-06-18 | | Type notebook() for the GUI, and license() for information. | ---------------------------------------------------------------------- sage: A = matrix(2) sage: B = copy(A) sage: A; B [0 0] [0 0] [0 0] [0 0] sage: B[0,1] = 2 sage: A; B [0 0] [0 0] [0 2] [0 0] > If a and b were numbers, changing b does not change a as well, as one > would expect. Again, it's a feature of Python, not an issue with Sage per se. However, note this inconsistent behaviour: sage: M = 1 sage: N = M sage: M; N 1 1 sage: M = 2 sage: M; N 2 1 -- Regards Minh Van Nguyen --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
