Skip to content Skip to sidebar Skip to footer

Python: Confused With List.remove

I'm very new to Python, so sorry for the probably simple question. (Although, I spent now 2 hours to find an answer) I simplified my code to illustrate the problem: side=[5] eva=s

Solution 1:

Python has "things" and "names for things". When you write

side = [5]

you make a new thing [5], and give it the name side. When you then write

eva = side

you make a new name for side. Assignments are just giving names to things! There's still only one thing [5], with two different names.

If you want a new thing, you need to ask for it explicitly. Usually you would do copy.copy(thing), although in the case of lists there's special syntax thing[:].

FYI "things" are usually called "objects"; "names" are usually called "references".

Solution 2:

eva and side refer to the same list.

If you want to have a copy of the list:

eva = side[:]

You can read more about copying lists in this article: Python: copying a list the right way

Edit: That isn't the only way to copy lists. See the link posted in the first comment of this answer.

Solution 3:

dusan's answer is correct, and is a clever approach, but I think it breaks the Zen of Python guideline that "Explicit is better than implicit."

A far more common pattern I've seen to ensure an item is a deepcopy is with the copy module.

>>>import copy>>>eva = copy.copy(side)

Post a Comment for "Python: Confused With List.remove"