Python的内存管理机制(一)
文章目录
- 引用机制
- 垃圾回收
- 缓存池
- 深拷贝与浅拷贝
引用机制
对象是内存中的实体,对象名则为对象的引用,对象与引用是分离的,这是动态类型的核心,每一个对象都维护一个ob_ref用于记录对象被引用的次数
,使用sys模块中的getrefcount()方法可获得当前对象的引用次数。
from sys import getrefcount
a = "hello python"
print(getrefcount(a))//函数参数的传递也是利用引用
b = a
print(getrefcount(a))
>> 2
>> 3
垃圾回收
触发垃圾回收的三个条件
- gc.collect()
- GC达到阈值
- 程序执行结束
分代回收:存活的越久的对象越不容易被回收,经过一定次数的扫描对象可逐渐变为一代、二代。
标记删除:主要解决循环引用内存无法回收问题
a = []
b = []
a.append(b)
b.append(a)
print(a)
print(b)
>>[[[...]]]
>>[[[...]]]
将非活动对象标记为可删除
缓存机制(缓存池)
1.整数对象缓存池
a = 1
b = 1
print(id(a))
print(id(b))
140735981711616
140735981711616
2.字符串缓存
当多个引用的对象是相同的较短字符串时,引用的地址相同,也就是引用的是同一个字符串对象。
a = 'abc'
b = 'abc'
print(id(a))
print(id(b))
2153715420912
2153715420912
下节将探讨深浅拷贝…