pyhton的内存管理机制为引用计数

当python创建对象时,引用计数+1,释放对象时,引用计数-1

在以下状况下引用计数+1

1. x = 1

2. y = x

3.foo(x)   作为函数的参数

4.[1,x,3]   作为容器对象的值时

引用计数-1的情况,内存释放,对象离开其作用域空间

1. foo函数执行完成后

2. del x,显示销毁, del y

3.对象别名被复制给新值 x = 123

4.对象互相引用

 

pyhton的垃圾回收机制

垃圾回收机制会自动检查引用计数为0的对象,将其从内存中释放,若对象互相引用,垃圾回收机制会触发循环回收器释放内存

python执行时与操作系统沟通时,会开启许多小块状内存(整数,浮点数,list等独立的私有内存池),但这些内存块并不用来存储对象,所以对象没有一级存储池,python会不断地

调用malloc 和 free 进行对象内存释放, 频繁地在操作核心块和用户块间切换,严重影响python性能,为此Python实现了内存引用池机制解决这些问题

 

python内存引用池

垃圾回收机制,检测到的引用计数为0的对象,不返回给操作系统,而是交给内存池

Python中所有小于256个字节的对象都使用pymalloc实现的分配器,而大的对象则使用系统的 malloc。另外Python对象,如整数,浮点数和List,

都有其独立的私有内存池,对象间不共享他们的内存池。