scared about refrences...

SpreadTooThin bjobrien62 at gmail.com
Mon Oct 30 16:10:47 EST 2006


Marc 'BlackJack' Rintsch wrote:
> In <1162236136.367603.165180 at b28g2000cwb.googlegroups.com>, 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()




More information about the Python-list mailing list