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=side
print(str(side) + " side before")
print(str(eva) + " eva before")
eva.remove(5)
print(str(side) + " side after")
print(str(eva) + " eva after")
This yields:
[5] side before
[5] eva before
[] side after
[] eva after
Why does the remove command also affects the list ‘side’? What can I do to use a copy of ‘side’, without modifying the list?
Thank you very much
Edit: Thank you very much for the good and comprehensible answers!
Python has “things” and “names for things”. When you write
you make a new thing
[5], and give it the nameside. When you then writeyou 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 syntaxthing[:].FYI “things” are usually called “objects”; “names” are usually called “references”.