Reputation: 1043
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
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
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
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