首先,Python的内存管理必须提到Python解释器在什么情况下会释放变量的内存。Python引用了一个简单的内存计数来控制它。当一个变量的引用计数为0时,它将被解释器回收。当然,在交互模式下,内存不会立即释放,解释器将被重新启动。
以下是引用计数的知识:
1) 增加引用计数 当对象被创建并(引用)赋值变量时,对象的引用计数设置为1。
对象引用计数增加:
创建对象:x = 3.14
创建了另一个别名:y = x
函数(新的本地引用)作为参数传递:foobar(x)
成为容器对象的一个元素:myList = [123, x, 'xyz']
2) 减少引用计数 对象引用计数减少:
本地引用离开了它的范围。例如,fobar()函数结束时
对象的别名被明显销毁:del y
对象的一个别名被赋予其他对象:x = 123
从一个窗口对象中移除对象:myList.remove(x)
窗户对象本身被销毁:del myList
3) del语句 Del语句将删除对象的引用,其语法如下:del obj[, obj2[, ...objN]]
例如,在上例中执行del y会产生两个结果:
从当前的名称空间中删除y
x引用计数减1
让我们来试试
importsys x=3.14 print("原引用值:",sys.getrefcount(x)) y=x print("引用y后:",sys.getrefcount(x)) x=4.0 print("重新赋值后:",sys.getrefcount(x)) dely print("删除y引用后:",sys.getrefcount(x))
原始引用值:3 引用y后:4 重新赋值后:3 删除y引用后:3
推荐阅读关于python内存的文章:
python如何控制内存?
如何管理python的内存?
(推荐操作系统:windows7系统Python 3.9.1,DELL G3电脑。)