[Pythonmac-SIG] Problem with arrays of arrays
Vincenzo Tschinke
tschinke@swissonline.ch
Sun, 19 Dec 1999 16:43:35 +0100
Hi!
I am doing some basic molecular connectivity operation (graphs). Trying to
convert a list of bonds (list of edges) into a connectivity table (for each
vertex [atom], list of connected vertices), by filling an array of arrays, I
got the right or wrong result depending on how I define the initial arrays.
If I define an array of N emtpy arrays as
array_of_empties = N * [[]]
I get the *wrong* result. If I use the more exotic definition
array_of_empties = map ( lambda x : [] , range( N ))
I get the *right* result. Note that after being created, such two arrays
compare as equal.
Please see the listing below.
Is there anything wrong with the first definition, or do we have a
Python bug here?
===========================================================================
Python 1.5.2b1 (#47, Jan 13 1999, 15:14:59) [CW PPC w/GUSI w/MSL]
>>> ee=[[1,2],[1,3],[1,4]] # 3 edges : 3 vert. connected to centr. vertex
>>> ee
[[1, 2], [1, 3], [1, 4]]
>>> aa=4*[[]] # array of four empty arrays
>>> AA=map(lambda x : [], range(4)) # same as above
>>> aa==AA # arrays are equal !!!
1
>>> for p in ee: # build table of connected verteces
... i=p[0]
... j=p[1]
... aa[i-1].append(j)
... aa[j-1].append(i)
... AA[i-1].append(j)
... AA[j-1].append(i)
...
>>> aa # wrong result !!!
[[2, 1, 3, 1, 4, 1], [2, 1, 3, 1, 4, 1], [2, 1, 3, 1, 4, 1], [2, 1, 3, 1, 4, 1]]
>>> AA # correct result
[[2, 3, 4], [1], [1], [1]]
>>> aa==AA
0
>>>
=======================
Vincenzo Tschinke
Kernmattstr. 24
CH-4102 Binningen
Switzerland
+4161 422 1991 (T+F)
tschinke@swissonline.ch
=======================