python垃圾回收机制
时间:2023-3-1 21:41 作者:wen 分类: Python
python中的垃圾回收是以引用计数为主, 分代收集为辅
导致引用计数+1的情况
-
对象被创建
-
对象被引用
-
对象被作为参数, 传入到一个函数中
-
对象作为一个元素, 存储在容器中
导致引用计数-1的情况
-
对象的别名被显式销毁
-
对象的别名被赋予新的对象
-
一个对象离开它的作用域
-
对象所在的容器被销毁 , 或从容器中删除对象
# 垃圾回收
import gc
import sys
import os
import psutil
a = []
# 查看对象被引用几次
print(sys.getrefcount(a)) # 2次
b = a
print(sys.getrefcount(a)) # 3次
c = b
d = c
print(sys.getrefcount(a)) # 5次
def show_men_size(tag):
pid = os.getpid()
p = psutil.Process(pid)
info = p.memory_full_info()
memory = info.uss/1024/1024
print('{} memory used:{} MB'.format(tag, memory))
pass
# 验证循环引用的情况
def func():
show_men_size('初始化')
a = [i for i in range(10000000)]
b = [i for i in range(10000000)]
a.append(b)
b.append(a)
show_men_size('创建列表对象 a, b 之后')
print(sys.getrefcount(a))
pass
func()
gc.collect() # 手动释放
show_men_size('完成后')