Marc 'BlackJack' Rintsch wrote: > In <[EMAIL PROTECTED]>, SpreadTooThin > wrote: > > > I'm really worried that python may is doing some things I wasn't > > expecting... but lets see... > > Expect that Python never copies something if don't ask explicitly for a > copy. > > > if I pass a list to a function def fn(myList): > > > > and in that function I modify an element in the list, then does the > > callers list get modied as well. > > > > def fn(list): > > list[1] = 0 > > > > myList = [1, 2, 3] > > print myList > > fn(myList) > > print myList > > > >>>> [1,2,3] > >>>> [1,0,3] > > > > How can I avoid this? In this case this is a really simplified example > > but the effects are the same... > > In this case: > > def fn(lst): > lst = list(lst) > lst[1] = 0 > > > > How do I specify or create deep copies of objects that may contain > > other objects that may contain other object that may contain other > > objects.... > > See the `copy` module especially `copy.deepcopy()`. >
This appears to be the right thing to do to me.. (but what do I know?) I tried this which more closely resembles my project but this doesn't work: import array import copy class test: def __init__(self): self.a = array.array('H', [1, 2, 3]) self.b = ['a', 'b', 'c'] def dump(self): print self.a, self.b t = test() t.dump() def testit(x): t = copy.deepcopy(x) t.a[1] = 0 t.b[1] = 0 testit(t) t.dump() -- http://mail.python.org/mailman/listinfo/python-list