[sage-support] strange list behavior

2008-01-09 Thread benjamin antieau

Code for the worksheet attached below.

There must surely be a simple answer to this problem, but I have not
been able to figure it out. I loop through i,j print the list
[i,j], and append the list to pts. However, once appended to points
something goes wrong, and all that points sees are the constant lists
[3,3]. I have changed the various constants and such, but I am at a
loss to explain why this is happening.

What I need is for pts to contain the correct information. Any help
would really be appreciated.

Ben

{{{id=125|
P=[0,0]
i=0
pts=[]
while i4:
P[0]=i

j=0
while j4:
P[1]=j
print P
pts.append(P)
j+=1
i+=1
pts
///
[0, 0]
[0, 1]
[0, 2]
[0, 3]
[1, 0]
[1, 1]
[1, 2]
[1, 3]
[2, 0]
[2, 1]
[2, 2]
[2, 3]
[3, 0]
[3, 1]
[3, 2]
[3, 3]
[[3, 3], [3, 3], [3, 3], [3, 3], [3, 3], [3, 3], [3, 3], [3, 3], [3,
3], [3, 3], [3, 3], [3, 3], [3, 3], [3, 3], [3, 3], [3, 3]]
}}}

--~--~-~--~~~---~--~~
To post to this group, send email to sage-support@googlegroups.com
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://sage.math.washington.edu/sage/ and http://sage.scipy.org/sage/
-~--~~~~--~~--~--~---



[sage-support] Re: strange list behavior

2008-01-09 Thread benjamin antieau

This indeed fixes the problem, and clarifies some other things for me
as well.

Thanks for your quick response Jonathan.

Ben

On Jan 9, 11:59 pm, Jonathan Bober [EMAIL PROTECTED] wrote:
 Hi.

 short answer: immediately after the line

 while i  4:

 add the line

 P = [0,0]

 Your problem seems to be that when you put something in a list, python
 does not make a copy of it, but instead stores that actual object in the
 list. So the line

 pts.append(P)

 appends the object P (or, rather, the object that P references) to the
 list pts. Thus, when you change P, you also 'change' the list. (A better
 way to think of it, though, is that you don't actually change the list
 by changing P. Instead, you might think of the list as eventually
 looking like

 [P, P, P, ..., P]

 because all you did was append the same object a bunch of times, so of
 course all of the entries in pts are the same at the end.)

 The line

 P = [0,0]

 creates a new list (which P now references). Putting that line in the
 while loop should fix the problem because you will be adding a different
 object to the list each time.

 A simpler example is

 sage: x = ['something']
 sage: y = x # now x and y are the SAME OBJECT
 sage: x
 ['something']
 sage: y
 ['something']
 sage: x[0] = 'something else'
 sage: y # since x and y are the same object, they have the same contents
 ['something else']
 sage: x = ['something else again'] # now x references a new object,
 sage: y# so y doesn't change
 ['something else']

 -bober

 On Wed, 2008-01-09 at 21:25 -0800, benjamin antieau wrote:
  Code for the worksheet attached below.

  There must surely be a simple answer to this problem, but I have not
  been able to figure it out. I loop through i,j print the list
  [i,j], and append the list to pts. However, once appended to points
  something goes wrong, and all that points sees are the constant lists
  [3,3]. I have changed the various constants and such, but I am at a
  loss to explain why this is happening.

  What I need is for pts to contain the correct information. Any help
  would really be appreciated.

  Ben

  {{{id=125|
  P=[0,0]
  i=0
  pts=[]
  while i4:
  P[0]=i

  j=0
  while j4:
  P[1]=j
  print P
  pts.append(P)
  j+=1
  i+=1
  pts
  ///
  [0, 0]
  [0, 1]
  [0, 2]
  [0, 3]
  [1, 0]
  [1, 1]
  [1, 2]
  [1, 3]
  [2, 0]
  [2, 1]
  [2, 2]
  [2, 3]
  [3, 0]
  [3, 1]
  [3, 2]
  [3, 3]
  [[3, 3], [3, 3], [3, 3], [3, 3], [3, 3], [3, 3], [3, 3], [3, 3], [3,
  3], [3, 3], [3, 3], [3, 3], [3, 3], [3, 3], [3, 3], [3, 3]]
  }}}
--~--~-~--~~~---~--~~
To post to this group, send email to sage-support@googlegroups.com
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://sage.math.washington.edu/sage/ and http://sage.scipy.org/sage/
-~--~~~~--~~--~--~---