千家信息网

Python内存管理的示例分析

发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,这篇文章给大家分享的是有关Python内存管理的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体如下:a = 1a是引用,1是对象。Python缓存整数和短字符串
千家信息网最后更新 2025年01月18日Python内存管理的示例分析

这篇文章给大家分享的是有关Python内存管理的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

具体如下:

a = 1

a是引用,1是对象。Python缓存整数和短字符串,对象只有一份,但长字符串和其他对象(列表字典)则有很多对象(赋值语句创建新的对象)。

from sys import getrefcounta=[1,2,3]print(getfrecount(a))

返回4,当使用某个引用作为参数传给getfrecount时,创建了临时引用,+1.

对象引用对象

class from_obj(object):  def __init__(self, to_obj):    self.to_obj = to_objb = [1,2,3]a = from_obj(b)print(id(a.to_obj))print(id(b))c = [b,b]

a引用对象b,c引用b两次。

通过objgraph包(之前安装xdot)梳理引用拓扑结构。

x = [1, 2, 3]y = [x, dict(key1=x)]z = [y, (x, y)]import objgraphobjgraph.show_refs([z], filename='ref_topo.png')

千万不要两个对象相互引用或自己引用自己,形成引用环给垃圾回收机制带来麻烦。

垃圾回收

回收引用计数为0的对象。垃圾回收时python不能做其他任务,降低效率,所以不是总随时都垃圾回收。python记录分配对象(object allocation)和取消分配对象(object deallocation),差值高于某阈值启动回收。

import gcprint(gc.get_threshold())

(700,10,10)700为启动阈值,两个10是分代回收相关阈值,通过set_threshold()重设。手动启用垃圾回收gc.collect()

分代回收

基本假设:存活越久越不可能变垃圾。

对象分0,1,2三代。新建对象0代,经过一次垃圾回收依然存活归为下一代。垃圾回收启动时一定扫描所有0代,如果0代经过一定次数垃圾回收,则扫0和1代,同理扫0,1和2代。(700,10,10)表明10次0代配合1次1代,10次1代配合1次2代。

孤立的引用环

原本两表对象相互引用后删除引用,但对象引用计数部位0不会被回收。

则python复制每个对象引用计数,对某个对象i,遍历所有对象i引用的对象j,将gc_ref_j减1.

感谢各位的阅读!关于"Python内存管理的示例分析"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

对象 垃圾 阈值 内存 示例 分析 管理 两个 内容 字符 字符串 更多 篇文章 分配 不错 实用 下一代 任务 原本 参数 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 hp服务器管理口配置 数据库原理与应用第六章测试答案 网络安全的人物历史 葫芦岛中级网络技术师 抖音店铺主账号如何挂在服务器 数据库验证是什么原因 药智数据库介绍 内蒙古日报网络安全 怎么租服务器计算fluent 非遗数据库技术 太仓品牌网络技术怎么样 厦门恒宇网络技术有限公司 刀箱服务器 默纳克服务器怎么调灯光 许昌智启网络技术有限公司 买手机一直显示服务器未接入 互联网50强科技公司 杭州格爱网络技术有限公司 如何在手机上建立我的世界服务器 小视频软件开发公司 线性代数和数据库应用技术 xp 代理服务器设置 怎么解除微信服务器对语音的清除 海口龙芯服务器批发 line 服务器连接失败 网络技术破解入侵博客批量 五行山服务器什么时候更新 徐汇区企业网络技术服务认真负责 蓝软连接sql数据库 服务器登录显示网络异常
0