Python内存管理实例分析

 更新时间:2019年07月10日 10:57:24   作者:黑加仑王子  
这篇文章主要介绍了Python内存管理,结合实例形式分析了Python对象的引用、垃圾回收、分配等相关原理与操作技巧,需要的朋友可以参考下

本文实例讲述了Python内存管理。分享给大家供大家参考,具体如下:

a = 1

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

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

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

对象引用对象

class from_obj(object):
  def __init__(self, to_obj):
    self.to_obj = to_obj
b = [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 objgraph
objgraph.show_refs([z], filename='ref_topo.png')

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

垃圾回收

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

import gc
print(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相关内容感兴趣的读者可查看本站专题:《Python进程与线程操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总

希望本文所述对大家Python程序设计有所帮助。

相关文章

  • Python爬虫爬取煎蛋网图片代码实例

    Python爬虫爬取煎蛋网图片代码实例

    这篇文章主要介绍了Python爬虫爬取煎蛋网图片代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Python selenium模拟网页点击爬虫交管12123违章数据

    Python selenium模拟网页点击爬虫交管12123违章数据

    本次介绍怎么以模拟点击方式进入交管12123爬取车辆违章数据,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • Python标准异常和异常处理详解

    Python标准异常和异常处理详解

    这篇文章主要介绍了Python标准异常和异常处理详解,本文讲解了python标准异常、什么是异常、异常处理的多种方法和实例等内容,需要的朋友可以参考下
    2015-02-02
  • 基于pandas数据样本行列选取的方法

    基于pandas数据样本行列选取的方法

    下面小编就为大家分享一篇基于pandas数据样本行列选取的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • PyTorch 成功安装验证的方法小结

    PyTorch 成功安装验证的方法小结

    这篇文章主要介绍了PyTorch 成功安装验证的方法小结,分享几种验证PyTorch是否安装成功的方法,确认PyTorch是否工作正常非常重要,可以避免后续的问题,需要的朋友可以参考下
    2023-11-11
  • OpenCV实现图片亮度增强或减弱

    OpenCV实现图片亮度增强或减弱

    这篇文章主要为大家详细介绍了OpenCV实现图片亮度增强或减弱,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • Python获取指定字符前面的所有字符方法

    Python获取指定字符前面的所有字符方法

    下面小编就为大家分享一篇Python获取指定字符前面的所有字符方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • Python实现APP自动化发微信群消息的示例代码

    Python实现APP自动化发微信群消息的示例代码

    本文主要介绍了Python实现APP自动化发微信群消息的示例代,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下码
    2022-01-01
  • pytorch教程之网络的构建流程笔记

    pytorch教程之网络的构建流程笔记

    这篇文章主要介绍了pytorch教程中网络的构建流程,文中附含了详细的示例代码流程,有需要的朋友可以借鉴参考下,希望可以有所帮助
    2021-09-09
  • python模拟点击玩游戏的实例讲解

    python模拟点击玩游戏的实例讲解

    在本篇文章里小编给大家整理的是一篇关于python模拟点击玩游戏的实例讲解内容,有需要的朋友们可以学习下。
    2020-11-11

最新评论