Python Forum
Why does pop() removes an element from more than one list?
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Why does pop() removes an element from more than one list?
#1
I have just started using python and encountered this problem. I made list2 a copy of list1. When I remove the last element ("b") in list2 using list2.pop(), the same thing happens to list1 at the same time (which was not intended). Are list1 and list2 somehow 'entangled'?? What should I do if I want to make such changes to one of the lists only?

I know this might be a silly question but still please help :)

list1 = ["a","b"]
list2 = list1
print("list1 = ", list1)
list2.pop()
print("list1 = ", list1)
Reply
#2
After the statement list2 = list1, the two lists are the very same object. In fact there is only one list with two names, list1 and list2. The statement simply creates a new name for the object currently named list1. If you want a new object, make a copy
list2 = list(list1)
Reply
#3
(Nov-16-2019, 04:52 PM)albufork Wrote: I made list2 a copy of list1.
Actually list1 and list2 point to same object. the assignment just copies the reference to the list, not the actual list, so both list1 and list2 refer to the same list after the assignment.
to make a copy of list use

list2 = list1.copy()
or

list2 = list1[:]
you can also use copy.copy() and copy.deepcopy() from copy module
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs

Reply
#4
Thank you, Gribouillis and buran! The problem is now solved!

Now I understand that list1 and list2 point to the same object. Is this the case only in defining a new list but not other instances of objects?
Reply
#5
albufork Wrote:Is this the case only in defining a new list but not other instances of objects?
It is the same for all python objects. The effect of the statement spam = eggs is that from now on, the word spam refers to the object that is currently referred to by the name eggs. No new object is created by this statement.
Reply
#6
In addition, the effect you see on list is because lists are mutable objects. i.e. when you append, pop, etc. it's still the same object, so the change is "visible" in all names that refer to same object. Same will apply to any mutable objects, e.g. dicts
>>> spam = {1:'a', 2:'b'}
>>> eggs = spam
>>> spam[3] = 'c'
>>> spam
{1: 'a', 2: 'b', 3: 'c'}
>>> eggs
{1: 'a', 2: 'b', 3: 'c'}
just for example, strings on other hand are immutable. i.e. you cannot change the object
>>> spam = 'foo'
>>> eggs = spam
>>> id(spam)
140509962431992
>>> id(eggs)
140509962431992
>>> spam = spam + 'bar'
>>> spam
'foobar'
>>> eggs
'foo'
>>> id(spam)
140509962432160
>>> id(eggs)
140509962431992
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs

Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Sume Every 10 element in the list and Divided of Sum quest_ 7 142 Nov-27-2020, 10:58 AM
Last Post: perfringo
  Counting Element in Multidimensional List quest_ 1 91 Nov-25-2020, 10:00 PM
Last Post: quest_
  Adding List Element if Second part of the List Elements are the Same quest_ 3 124 Nov-25-2020, 04:33 PM
Last Post: bowlofred
  Removing element from list squall 6 177 Nov-22-2020, 09:34 PM
Last Post: jefsummers
  2d Array adds last element to entire list waiteup 2 97 Nov-19-2020, 08:25 PM
Last Post: bowlofred
  How to get index of minimum element between 3 & 8 in list Mekala 2 165 Nov-10-2020, 12:56 PM
Last Post: DeaD_EyE
  Problem printing last element from a list tester_V 3 198 Oct-30-2020, 04:54 AM
Last Post: tester_V
  Dataframe Removes Zeros JoeDainton123 2 169 Sep-17-2020, 12:47 PM
Last Post: scidam
  Finding an element in a 1d list in a 2d array lionrocker221 0 374 Jun-27-2020, 04:50 PM
Last Post: lionrocker221
  removing dictionary element in list using (key, value) MelonMusk 3 438 Jun-13-2020, 02:37 PM
Last Post: buran

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020