On Sat, 19 Nov 2016 12:44 pm, jf...@ms4.hinet.net wrote: > I have a working list 'tbl' and recording list 'm'. I want to append 'tbl' > into 'm' each time when the 'tbl' was modified. I will record the change > by append it through the function 'apl'. [...] > Obviously the most intuitive way doesn't work. > def apl0(tbl): > m.append(tbl)
That works perfectly -- it just doesn't do what you want. It sounds like what you want is to append a COPY of the list rather than the list itself. I'm not sure why, making copies of things in Python is usually rare, but perhaps I don't understand what you are doing with this "working list" and "recording list". The simplest way to do this is: m.append(tbl[:]) # use slicing to make a copy In newer versions of Python, you can do this: m.append(tbl.copy()) But that won't work in Python 2.7. Or you can do this: from copy import copy m.append(copy(tbl)) But the most Pythonic way (the most standard way) is to use a slice to copy the list: m.append(tbl[:]) > and introducing a local variable will not help either. > def apl1(tbl): > w=tbl > m.append(w) Of course not. Assignment does not make a copy. -- Steve “Cheer up,” they said, “things could be worse.” So I cheered up, and sure enough, things got worse. -- https://mail.python.org/mailman/listinfo/python-list