假设我有一个列表:
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]
关于python - 对在 python 中将列表项分配给 vars 感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18997696/