我知道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参考绑定中赋值吗?
谢谢
答案 0 :(得分:1)
a = b[2] # binding a to b[2] ?
具体来说,这会将名称 a
绑定到b[2]
引用的相同值。它不会将a
绑定到索引b
处列表2
中的元素。名称a
完全独立于其取值的列表。
a = 1000
现在,将名称a
绑定到新值整数1000
上。由于a
与b
没有关联,因此b
不会改变。
在第二个示例中:
a = b
现在a
绑定到b
绑定到的相同列表值。所以当你这样做
a[0] = 1000
您修改基础列表中具有两个不同名称的元素。通过任何一个名称访问列表时,您将看到相同的值。
答案 1 :(得分:1)
a[0] = ...
是一种特殊的赋值形式,可以简化方法调用,
a.__setattr__(0, ...)
您没有重新分配名称a
;您将在 a
(和b
)所引用的对象中分配一个“插槽”。
答案 2 :(得分:-1)
列表是可变对象,不是整数。在python中4不能变成5,但是列表可以更改其内容。