>>>> a=b=[] >>>> a > [] >>>> b > []
These are the same list. >>>> a=[1,2,3] But here you create a new list and assign it to a. >>>> a > [1, 2, 3] >>>> b > [] So a points to the new list and b to the original. > Tinkering some more I think it is the append that did it. Yes, the append adds the data to the original list. >>>> a=b=[] >>>> a > [] >>>> b > [] >>>> a.append([1,2,3]) >>>> a > [[1, 2, 3]] >>>> b > [[1, 2, 3]] Exactly so. > It appended to the common object and did not create a separate one ? Yes, the first assignment to 'a' created a new list and broke the shared reference. I almost never use the x=y=value style for this reason. For the minimal amount of typing I prefer either x = value1 y = value2 or tuple assignment: x,y = v1,v2 Which for lists is: x,y = [],[] ie two separate empty lists. > I guess var1 = var2 = 0 is generally bad programming style ? Its fine if you're sure it's what you want, but what it looks like isn't always what you get... as you discovered :-) > get my code more compact using list comprehension etc Compact code is not always a virtue. Tuple assignment seems to me a good compromise. And FWIW I try to limit tuple assignment to 3 values max just for clarity. Also I try to ensure the variables are linked in some way - like x,y coordinates, or similar types of variable: max_len, min_len etc > PS This is probably an impossible question but I always struggle to > find names > for variables - any hints ? Write a description of what it is there for - what does it do in the program. Abbreviate that to a couple of key words. That's your name... If you want a more detailed view find a copy of Code Complete by McConnell, it has a whole chapter on variable naming issues... Your variable names looked ok to me FWIW. Alan G _______________________________________________ Tutor maillist - [email protected] http://mail.python.org/mailman/listinfo/tutor
