user2563817
user2563817

Reputation: 1043

copy a list in python

Please what's the difference between this two codes in python:

white=[2,4,8,9]
black = white

and

white=[2,4,8,9]
black = white[:]

thank you so much.

Upvotes: 2

Views: 606

Answers (3)

Vorsprung
Vorsprung

Reputation: 34337

The first copies a reference to the list white to the variable black

So any changes to black will also alter white and visa versa

Think of it as an alias or nickname for white

The second copies the contents of the list white to the variable black and is perhaps better written like this

black = list(white)

In this case there is no connection between the two variables black and white as it is the contents of white that are copied and not a reference to white itself.

Extra to take into account the relevant comment below (thanks Jon Clements): you can read more about deep copies vs shallow copies here Understanding dict.copy() - shallow or deep?

Upvotes: 8

dansalmo
dansalmo

Reputation: 11686

You can use id() and is to see the difference in Python shell:

>>> white=[2,4,8,9]
>>> black = white
>>> id(white)
41026064
>>> id(black)
41026064
>>> black is white
True

black and white point to the same object, so they are not two things, they are one. When you make a slice (or shallow) copy, a new object is created.

>>> white=[2,4,8,9]
>>> black = white[:]
>>> id(white)
41026064
>>> id(black)
41025904
>>> black is white
False

Upvotes: 5

Eli Bendersky
Eli Bendersky

Reputation: 273476

As an additional data point, Python 3.3 added the copy method as a readable alternative to the slicing syntax. So white.copy() also creates a shallow copy of the list white

Upvotes: 0

Related Questions