在Python语言中,当我们为一个变量赋一个新值时,旧变量会发生什么情况?

2022-04-17 00:00:00 python object variables immutability

问题描述

我知道还有其他类似的问题,但它们没有回答重新分配后以前的值会发生什么,这就是为什么我决定发布一个新的问题。到目前为止,我已经了解到,Python中的一切都是对象,甚至int、浮点、字符串、bool类型的变量也是对象,我在某个地方读到,当我们分配一个变量num = 11时,num实际上并不是将11的值存储在其中,而是指向内存中存储11的某个位置的指针。如果我们尝试将一个值重新分配给numnum = 22,那么它将停止指向11,而开始指向将存储在内存中不同位置的新值22,所以我的问题是,前一个值会发生什么情况,即11是被释放还是被删除?


解决方案

如果不再有任何对对象的引用,则该对象有资格进行垃圾回收。通常,它会立即发生。

可能存在引用循环,一种简单的情况是引用计数为非零的对象,因为它持有对自身的唯一引用。

>>> a = []  # A list with a reference count of 1
>>> a.append(a)  # List now has a reference count of 2: a and a[0]
>>> del a  # List has a reference count of 1, but no name refers to the list

Python实现使用单独的算法定期扫描所有现有对象,以查找此类循环并删除无法再从Python代码访问的对象。

相关文章