if var1
equals 1
, and you run var2 = var1
, that sets var2
to 1
.
if list1
equals [
, 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 [
]
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.
list2 = list1[:]
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.
True. Since it’s all interpreted, it doesn’t act like primitives in things like C and everything is an object, that is a ref of some sort. However, there is a difference between how Python “primitives” and Python collections work within the language syntax.
Now I’m curious what differences you are talking about, because I’m no Python expert, but I can’t think of any. If you mean identity representation, no, it’s not different: