Python不可变对象的赋值

Python不可变对象的赋值

Question #

下面的 Python 代码示例:

a = 1
b = a
a = a + 1

这段代码对应的变量与对象之间的内存结构是怎样的?

Answer #

这里首先将 1 赋值于 a,即 a 指向了 1 这个对象,如下面的流程图所示: 接着 b = a 则表示,让变量 b 也同时指向 1 这个对象。这里要注意,Python 里的对象可以被多个变量所指向或引用。 最后执行 a = a + 1。需要注意的是,Python 的数据类型,例如整型(int)、字符串(string)等等,是不可变的。所以,a = a + 1,并不是让 a 的值增加 1,而是表示重新创建了一个新的值为 2 的对象,并让 a 指向它。但是 b 仍然不变,仍然指向 1 这个对象。因此,最后的结果是,a 的值变成了 2,而 b 的值不变仍然是 1。 通过这个例子你可以看到,这里的 a 和 b,开始只是两个指向同一个对象的变量而已,或者你也可以把它们想象成同一个对象的两个名字。简单的赋值 b = a,并不表示重新创建了新对象,只是让同一个对象被多个变量指向或引用。同时,指向同一个对象,也并不意味着两个变量就被绑定到了一起。如果你给其中一个变量重新赋值,并不会影响其他变量的值。

From #

16 | 值传递,引用传递or其他,Python里参数是如何传递的?

Python变量的赋值 Python通过函数修改变量值的两种方法