On Oct 1, 2012, at 00:28 , Santanu Sarkar wrote:
> I have written the following:
>
> T=[0]*2
> S=[]
> l=2
> for i in range(l):
> T[0]=i
> T[1]=i+1
> print T
> S.append(T)
>
> Now S becomes [[1, 2], [1, 2]] instead of [[0,1],[1,2]].
> In my situation, length l of S is not fixed. Is there any
> method to solve this problem?
This is the result of a feature of the Python language. 'T' is the name of an
array, and acts like its address, so as you append T to S, you are continually
reusing that same address. When you update the elements in T (by, e.g.,
"T[0]=i"), you are modifying the content of T.
To avoid this, you could do something like
S=[]
l=2
for i in range(l):
print T
S.append([i,i+1])
For details, check the python documentation, in particular, the difference
between copy() and deepcopy().
Maybe start here:
<http://docs.python.org/library/copy.html#copy.deepcopy>
HTH
Justin
--
Justin C. Walker, Curmudgeon at Large
Director
Institute for the Enhancement of the Director's income
-----------
--
They said it couldn't be done, but sometimes,
it doesn't work out that way.
- Casey Stengel
--
--
You received this message because you are subscribed to the Google Groups
"sage-support" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
Visit this group at http://groups.google.com/group/sage-support?hl=en.