Can someone explain why the example with integers results in different values for x and y and the example with the list results in x and y being the same object?
x = 42
y = x
x = x + 1
print x # 43
print y # 42
x = [ 1, 2, 3 ]
y = x
x[0] = 4
print x # [4, 2, 3]
print y # [4, 2, 3]
x is y # True
Because integers are immutable, while list are mutable. You can see from the syntax. In
x = x + 1you are actually assigning a new value tox(it is alone on the LHS). Inx[0] = 4, you’re calling the index operator on the list and giving it a parameter – it’s actually equivalent tox.__setitem__(0, 4), which is obviously changing the original object, not creating a new one.