Hello, I'm myself still learning Python, so others may please correct me, if I'm wrong.
Consider the following sentence of your link "jeffknupp.com/...": "some_guy and first_names[0] both refer to the same object" This is what is going on here. Am Dienstag, den 09.09.2014, 05:50 +0000 schrieb JBB: > [...] > > for i,j in enumerate(zip(qq,rr)): > proc_file.append((blank_r)) # Add a row of blanks At this point, the last "row" of "proc_file" and the variable "blank_r" both refer to the list object [blank_r]. > proc_file[i+2][1] = j[0] > proc_file[i+2][2] = j[1] The object under "proc_file[...]" is changed now. This object is the list object [blank_r]! So "proc_file[-1]" and "blank_r" both refer to [blank_r] = ["", j[0], j[1], ""], which is added do the list object [proc_file] at the beginning of the next iteration. Thus, all entries of [proc_file] with index greater 1 are bound to [blank_r], which is itself modified in each iteration to the corresponding j: proc_file[0] -> ["a", "b,", "c", "d"] proc_file[1] -> ["A", "B,", "C", "D"] proc_file[2] -> [blank_r] proc_file[3] -> [blank_r] proc_file[4] -> [blank_r] proc_file[5] -> [blank_r] ... Thus, printing proc_file will always print the values of the last j for all rows greater than 1. Maybe, this will help (although I think you got it already: proc_file = [] proc_file = [['a','b','c','d']] proc_file.append(['A','B','C','D']) blank_r = ['','','',''] qq = ['aa','bb','cc','dd'] rr = ['inky', 'binky', 'pinky', 'clyde'] for i,j in enumerate(zip(qq,rr)): proc_file.append((blank_r)) # Add a row of blanks print "proc_file at loop entry:", proc_file print "current blank_r:", blank_r proc_file[i+2][1] = j[0] proc_file[i+2][2] = j[1] print "proc_file at loop end:", proc_file, "\n\n" And maybe thinking of lists as objects and of variables "containing" lists (somehow) as "pointers" may also help. > [...] 2) What works as desired: > proc_file.append(list(blank_r)) # Change it to list(blank_r) and it works The list() function returns a copy of [blank_r]. So with this code, "proc_file[-1]" refers not the same list object as "blank_r". This leads to the desired behaviour of your program. > It looks like .append binds blank_r to proc_file in 1). I change proc_file > and blank_r changes along with it. Should I expect this? [...] I hope, the above helps to understand why this behaviour.is to be expected. So long, Paul -- https://mail.python.org/mailman/listinfo/python-list