Skip to main content
 首页 » 编程设计

python之对在 python 中将列表项分配给 vars 感到困惑

2025年05月04日17lhb25

假设我有一个列表:

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]