Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Duplicating list of lists [newbie]

Reply
Thread Tools

Duplicating list of lists [newbie]

 
 
yatsek@gmail.com
Guest
Posts: n/a
 
      03-23-2008
Hi there.
I felt like I already know my toys around but it looks that I'm still
newbie on some points.

So here goes problem:

Lets say that we have list to copy:

a = [1,2,3]
b = a[:]
a[0] = 5

a
> [5,2,3]

b
>[1,2,3]


So far so good

But... let's say that "a" also contains lists:

a = [1,2,[5,6,7]]
b = a[:]

a[0] = 55
a
> [55,2,[5,6,7]]

b
> [1,2,[5,6,7]]


Looks OK but...

a[2][0] = 99
a
> [55,2,[99,6,7]]

b
> [1,2,[99,6,7]]


So - it looks that in list "b" there copy of all objects from list "a"
including not copy of list [5,6,7] but reference to it.

Is there simple way to copy a into b (like a[:]) with all copies of
all objects going as deep as possible? Or it can be done only
manually?

Regards
Yatsek
 
Reply With Quote
 
 
 
 
George Sakkis
Guest
Posts: n/a
 
      03-23-2008
On Mar 23, 11:34 am, (E-Mail Removed) wrote:
> Hi there.
> I felt like I already know my toys around but it looks that I'm still
> newbie on some points.
>
> So here goes problem:
>
> Lets say that we have list to copy:
>
> a = [1,2,3]
> b = a[:]
> a[0] = 5
>
> a
>
> > [5,2,3]

> b
> >[1,2,3]

>
> So far so good
>
> But... let's say that "a" also contains lists:
>
> a = [1,2,[5,6,7]]
> b = a[:]
>
> a[0] = 55
> a
>
> > [55,2,[5,6,7]]

> b
> > [1,2,[5,6,7]]

>
> Looks OK but...
>
> a[2][0] = 99
> a
>
> > [55,2,[99,6,7]]

> b
> > [1,2,[99,6,7]]

>
> So - it looks that in list "b" there copy of all objects from list "a"
> including not copy of list [5,6,7] but reference to it.


Right; that's what it's called a "shallow copy".

> Is there simple way to copy a into b (like a[:]) with all copies of
> all objects going as deep as possible?


Yes, there is:

from copy import deepcopy
b = deepcopy(a)


HTH,
George
 
Reply With Quote
 
 
 
 
Ryan Ginstrom
Guest
Posts: n/a
 
      03-23-2008
> On Behalf Of http://www.velocityreviews.com/forums/(E-Mail Removed)
> So - it looks that in list "b" there copy of all objects from list "a"
> including not copy of list [5,6,7] but reference to it.
>
> Is there simple way to copy a into b (like a[:]) with all
> copies of all objects going as deep as possible? Or it can be
> done only manually?


I'd suggest checking out copy.deepcopy.

>>> a = [1, [1, 2, 3], 2]
>>> b = a[:]
>>> a[1][2] = 'spam'
>>> b

[1, [1, 2, 'spam'], 2]
>>> from copy import deepcopy
>>> b = deepcopy(a)
>>> a[1][2] = 'deepcopy is your friend'
>>> b

[1, [1, 2, 'spam'], 2]

Regards,
Ryan Ginstrom

 
Reply With Quote
 
bearophileHUGS@lycos.com
Guest
Posts: n/a
 
      03-23-2008
Yatsek:
> Is there simple way to copy a into b (like a[:]) with all copies of
> all objects going as deep as possible?


If you only want to copy up to level-2, then you can do something
like:
cloned = [subl[:] for subl in somelist]
Or sometimes safer:
cloned =[list(subl) for subl in somelist]

If you want to go all the way down, you can use the deepcopy function
of the copy module. In many situations the level-2 copy may be enough,
and it can be faster.

Bye,
bearophile
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
common elements between list of lists and lists antar2 Python 2 07-17-2008 09:19 AM
How to have a list of lists (or array of lists) bahoo Python 3 04-03-2007 07:37 PM
list of lists of lists .... yomgui Python 6 07-31-2006 07:28 PM
List of lists of lists of lists... =?UTF-8?B?w4FuZ2VsIEd1dGnDqXJyZXogUm9kcsOtZ3Vleg==?= Python 5 05-15-2006 11:47 AM
extracting duplicating entries in a separate list Sherm Pendley Perl Misc 11 06-28-2005 04:45 PM



Advertisments