[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
=======================