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 [
]
As I said, it’s because you can’t change the value of a primitive value. (That is, unless you abuse the C interface.)
Because Python doesn’t protect classes, you just can’t do the same with the types you create. But that’s what is special, not the way if handles variables.
And this is different from languages like Java/C#, PHP/Perl, etc. Most imperative languages have primitive atomic values that go directly into your variables. But Python has only references (except for some complicated optimizations). Anyway, it is weird, and it’s one of the reasons people should learn C or Rust eventually.