python判断内存泄漏_Python内存泄漏

本文详细介绍了Python的内存管理机制,包括引用计数和垃圾回收,特别是针对内存泄漏的探讨。通过gc模块和objgraph库展示了如何诊断和解决内存泄漏问题,特别是循环引用的定位和消除方法。建议使用weakref进行弱引用以防止循环引用导致的内存泄漏。
摘要由CSDN通过智能技术生成

一、Python内存管理

Python中,python中,一切都是对象,又分为mutable和immutable对象。二者区分的标准在于是否可以原地修改,“原地”可以理解为相同的地址。可以通过id()查看一个对象的“地址”,如果通过变量修改对象的值,但id没发生变化,那么就是mutable,否则就是immutable。比如:

#immutable

a=1

print(id(a))#140734991946784

a=3

print(id(a))#140734991946848

#mutable

b =[1,2,3]print(id(b))#1273753854536

b.append(4)print(id(b))#1273753854536

1、引用计数

引用计数(References count),指的是每个Python对象都有一个计数器,记录着当前有多少个变量指向这个对象。

通过sys.getrefcount(obj)对象可以获得一个对象的引用数目,返回值是真实引用数目加1(加1的原因是obj被当做参数传入了getrefcount函数),例如:

importsys

s= 1

print(sys.getrefcount(s))#1297

a = 'jkl'

print(sys.getrefcount(a))#4

从中可以看出,Python中的对象缓存池会缓存十分常用的immutable对象,比如整数1。

2、垃圾回收

这里强调一下,本文中的的垃圾回收是狭义的垃圾回收,是指当出现循环引用,引用计数无计可施的时候采取的垃圾清理算法。

在python中,使用标记-清除算法(mark-sweep)和分代(generational)算法来垃圾回收

3、gc module

这里的gc(garbage collector)是Python 标准库,该module提供了与上一节“垃圾回收”内容相对应的接口。通过这个module,可以开关gc、调整垃圾回收的频率、输出调试信息。gc模块是很多其他模块(比如objgraph)封装的基础,在这里先介绍gc的核心API。

import gc

gc.enable()#开启gc(默认开启)

gc.disable()#关闭gc

gc.isenabled()#判断gc是否开启

gc.collect()#执行一次垃圾回收,不管gc是否处于开启状态都能使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值