A minor headache for a beginner coder
A minor headache for a beginner coder
if var1
equals 1
, and you run var2 = var1
, that sets var2
to 1
.
if list1
equals [1, 2, 3]
, and you run list2 = list1
, that sets list2
to list1
so if you then run var1 = 2
, var2
will still be 1
but if you run list1 = [3, 2, 1]
, list2
will give [3, 2, 1]
It won't (using your example explicitly) but in general what you've discovered is that:
Lists fall into the second category. There are ways to copy lists if you want distinct behaviour.
will perform a "shallow copy". If you have a list of lists, however, the nested lists are still shared references. There is
copy.deepcopy
available to make a complete clone of something (including all its nested members).This. Collections (lists, dicts, tuples) behave a little differently than primitives.
Every variable in Python is actually a reference (maybe optimized out, but still logically a reference). There's no difference.
Numbers, booleans, and None won't give you that kind of problem only because you can't change them.