垃圾回收机制
1、引用计数
x = 10 # 直接引用
print(id(x))
y = x
z = x
l = ['a', 'b', x] # 间接引用
print(id(l[2])) #
d = {'mmm': x} # 间接引用
print(id(d['mmm']))
x=10
l=['a','b',x] # l=['a'的内存地址,'b'的内存地址,10的内存地址]
x=123
print(l[2])
x=10
x=[10,]
l=['a','b',10]
2、标记清除
标记清除:用来解决循环引用带来的内存泄露问题
循环引用=>导致内存泄露
l1=[111,]
l2=[222,]
l1.append(l2) # l1=[值111的内存地址,l2列表的内存地址]
l2.append(l1) # l2=[值222的内存地址,l1列表的内存地址]
print(id(l1[1]))
print(id(l2))
print(id(l2[1]))
print(id(l1))
print(l2)
print(l1[1])
del l1
del l2
3、分代回收
分代回收:用来降低引用计数的扫描频率,提升垃圾回收的效率
(python将内存根据对象的存活时间划分为不同的集合,每个集合称为一个代,比如有年轻代、中年代、老年代,年轻代最先被回收)