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

标签 python list variables reference

假设我有一个列表:

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]

最佳答案

问题是 aL[0] 是对不可变对象(immutable对象)的引用,因此更改其中任何一个都不会影响其他引用:

>>> L = [1, 2, [3]]
>>> a = L[0]
>>> a = a + 1

a 现在指向一个新对象,而 L[0] 仍然指向同一个对象。

>>> a, L[0]   
(2, 1)

现在在这种情况下,bL[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/

相关文章:

python - print 是 Python 中的一个函数吗?

python - 在 python 中获取 xscreensaver 状态

c++ 无序列表示例

javascript - 列表中的特定元素与其他元素的格式不同

javascript - 如何根据两个不同的输入动态设置链接的路径?

javascript - myVar = !!someOtherVar

python - 不支持的操作 :not writeable python

python - 如何将多列附加到前 3 列并使用 pandas 重复索引值?

Python - append 到嵌套在 dict 子类中的列表

javascript - 使用CSS将JS变量移动到图像内部居中