Python中列表的赋值

Python中列表的赋值

Question #

我们再来看一个列表的例子:

l1 = [1, 2, 3]
l2 = l1
l1.append(4)
l1
[1, 2, 3, 4]
l2
[1, 2, 3, 4]

请问上面的操作中,变量与对象之间的内存结构有何变化?

Answer #

同样的,我们首先让列表 l1 和 l2 同时指向了[1, 2, 3]这个对象。 由于列表是可变的,所以 l1.append(4) 不会创建新的列表,只是在原列表的末尾插入了元素 4,变成[1, 2, 3, 4]。由于 l1 和 l2 同时指向这个列表,所以列表的变化会同时反映在 l1 和 l2 这两个变量上,那么,l1 和 l2 的值就同时变为了[1, 2, 3, 4]。 另外,需要注意的是,Python 里的变量可以被删除,但是对象无法被删除。比如下面的代码:

l = [1, 2, 3]
del l

del l 删除了 l 这个变量,从此以后你无法访问 l,但是对象[1, 2, 3]仍然存在。Python 程序运行时,其自带的垃圾回收系统会跟踪每个对象的引用。如果 [1, 2, 3]除了 l 外,还在其他地方被引用,那就不会被回收,反之则会被回收。

From #

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

Python不可变对象的赋值 Python变量的赋值