假设我有一个列表:
L = [1,2,3]
然后我将 L[0] 分配给变量 a
a = L[0]
那么如果我改变a,它不会影响L。
a = a + 1
print L # [1,2,3] not affected
为什么会这样? python 不是通过引用传递所有内容吗?我认为 a 指向 L[0]
请您参考如下方法:
问题是 a 和 L[0] 是对不可变对象(immutable对象)的引用,因此更改其中任何一个都不会影响其他引用:
>>> L = [1, 2, [3]]
>>> a = L[0]
>>> a = a + 1
a 现在指向一个新对象,而 L[0] 仍然指向同一个对象。
>>> a, L[0]
(2, 1)
现在在这种情况下,b 和 L[2] 是对可变对象 (list) 的引用,任何就地操作它们将影响所有引用:
>>> b = L[2]
>>> b.append(4) #list.append is an in-place operation
>>> b, L[2]
([3, 4], [3, 4])
>>> b = b + [5] #mutable object, but not an in-place operation
>>> b #b is assigned to new list object
[3, 4, 5]
>>> L[2] #L[2] is unchanged
[3, 4]
