Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Python (http://www.velocityreviews.com/forums/f43-python.html)
-   -   decouple copy of a list (http://www.velocityreviews.com/forums/t739906-decouple-copy-of-a-list.html)

 Dirk Nachbar 12-10-2010 01:48 PM

decouple copy of a list

I want to take a copy of a list a

b=a

and then do things with b which don't affect a.

How can I do this?

Dirk

 Kushal Kumaran 12-10-2010 01:54 PM

Re: decouple copy of a list

On Fri, Dec 10, 2010 at 7:18 PM, Dirk Nachbar <dirknbr@gmail.com> wrote:
> I want to take a copy of a list a
>
> b=a
>
> and then do things with b which don't affect a.
>
> How can I do this?
>

b = a[:] will create a copy of the list. If the elements of the list
are references to mutable objects (objects of your own classes, for
example), you might take a look at copy.deepcopy.

--
regards,
kushal

 Daniel Urban 12-10-2010 01:55 PM

Re: decouple copy of a list

b = list(a)

or

b = a[:]

 Wolfgang Rohdewald 12-10-2010 01:56 PM

Re: decouple copy of a list

On Freitag 10 Dezember 2010, Dirk Nachbar wrote:
> I want to take a copy of a list a
>
> b=a
>
> and then do things with b which don't affect a.
>
> How can I do this?
>
> Dirk

b=a[:]

--
Wolfgang

 Jean-Michel Pichavant 12-10-2010 02:06 PM

Re: decouple copy of a list

Dirk Nachbar wrote:
> I want to take a copy of a list a
>
> b=a
>
> and then do things with b which don't affect a.
>
> How can I do this?
>
> Dirk
>

In [1]: a = [1,2,3]

In [2]: b = a[:]

In [3]: b[0] = 5

In [4]: a
Out[4]: [1, 2, 3]

In [5]: b
Out[5]: [5, 2, 3]

Alternatively, you can write

import copy
a = [1,2,3]
b = a.copy()

if the list a contains mutable objects, use copy.deepcopy
(http://docs.python.org/library/copy.html)

JM

 Dirk Nachbar 12-10-2010 02:06 PM

Re: decouple copy of a list

On Dec 10, 1:56*pm, Wolfgang Rohdewald <wolfg...@rohdewald.de> wrote:
> On Freitag 10 Dezember 2010, Dirk Nachbar wrote:
>
> > I want to take a copy of a list a

>
> > b=a

>
> > and then do things with b which don't affect a.

>
> > How can I do this?

>
> > Dirk

>
> b=a[:]
>
> --
> Wolfgang

I did that but then some things I do with b happen to a as well.

 Wolfgang Rohdewald 12-10-2010 02:36 PM

Re: decouple copy of a list

On Freitag 10 Dezember 2010, Dirk Nachbar wrote:
> > b=a[:]
> >
> > --
> > Wolfgang

>
> I did that but then some things I do with b happen to a as
> well.

as others said, this is no deep copy. So if you do something
to an element in b, and if the same element is in a, both
are changed as they are still the same objects:

>>> x,y=5,6
>>> a=[x,y]
>>> b=a[:]
>>> id(a),id(b)

(140695481867368, 140695481867512)
>>> id(a[0]),id(b[0])

(33530584, 33530584)
>>> a=b
>>> id(a),id(b)

(140695481867512, 140695481867512)

--
Wolfgang

 cassiope 12-10-2010 04:18 PM

Re: decouple copy of a list

On Dec 10, 6:06*am, Jean-Michel Pichavant <jeanmic...@sequans.com>
wrote:
> Dirk Nachbar wrote:
> > I want to take a copy of a list a

>
> > b=a

>
> > and then do things with b which don't affect a.

>
> > How can I do this?

>
> > Dirk

>
> In [1]: a = [1,2,3]
>
> In [2]: b = a[:]
>
> In [3]: b[0] = 5
>
> In [4]: a
> Out[4]: [1, 2, 3]
>
> In [5]: b
> Out[5]: [5, 2, 3]
>
> Alternatively, you can write
>
> import copy
> a = [1,2,3]
> b = a.copy()
>
> if the list a contains mutable objects, use copy.deepcopy
> (http://docs.python.org/library/copy.html)
>
> JM

I'm not a pyguru, but... you didn't use copy quite right.

The other issue that the original person has noticed is that
a list may include a reference to something. When a list is
copied - if the reference is copied (not "deepcopied"], changes
to the referred object will be visible in both lists, even if
they are different lists.

HTH...

 nn 12-10-2010 04:29 PM

Re: decouple copy of a list

On Dec 10, 8:48*am, Dirk Nachbar <dirk...@gmail.com> wrote:
> I want to take a copy of a list a
>
> b=a
>
> and then do things with b which don't affect a.
>
> How can I do this?
>
> Dirk

Not knowing the particulars,
you may have to use:

import copy
b=copy.deepcopy(a)

 Jean-Michel Pichavant 12-10-2010 06:23 PM

Re: decouple copy of a list

cassiope wrote:
>> Alternatively, you can write
>>
>> import copy
>> a = [1,2,3]
>> b = a.copy()
>>
>>
>> JM
>>

>
> I'm not a pyguru, but... you didn't use copy quite right.
>
>

You're right, you're not a python guru so don't even try to contradict
me ever again.

....

:D of course I did it completly wrong. I don't know what happened in my
brain at that time, maybe nothing and that's the point.

JM

 All times are GMT. The time now is 07:33 AM.