Python中的参考分配-为什么值没有更改?

时间:2019-10-08 22:34:54

标签: python

我知道python中的“变量赋值”实际上是名称(变量)到对象的绑定/重新绑定。

b = [1,2,3]
a = b[2] # binding a to b[2] ?
a = 1000

b是[1, 2, 3]

此更改后,为什么b不更改?

这是另一个示例:

b = [1,2,3]
a = b
a[0] = 1000

这种情况b为[1000, 2, 3]

不是在Python参考绑定中赋值吗?

谢谢

3 个答案:

答案 0 :(得分:1)

a = b[2] # binding a to b[2] ?

具体来说,这会将名称 a绑定到b[2]引用的相同。它不会将a绑定到索引b处列表2中的元素。名称a完全独立于其取值的列表。

a = 1000

现在,将名称a绑定到新值整数1000上。由于ab没有关联,因此b不会改变。

在第二个示例中:

a = b

现在a绑定到b绑定到的相同列表值。所以当你这样做

a[0] = 1000

您修改基础列表中具有两个不同名称的元素。通过任何一个名称访问列表时,您将看到相同的值。

答案 1 :(得分:1)

a[0] = ...是一种特殊的赋值形式,可以简化方法调用,

a.__setattr__(0, ...)

您没有重新分配名称a;您将在 a(和b)所引用的对象中分配一个“插槽”。

答案 2 :(得分:-1)

列表是可变对象,不是整数。在python中4不能变成5,但是列表可以更改其内容。