Python如何进行内存管理?

mb5f8e5f84eff49 2021-07-20 04:57:28
游戏 游戏开发


Python中主要通过引用计数和内存池机制进行内存管理。

1620354893137125.png

 一、引用计数机制

Python内部使用引用计数(记录对象有多少个引用)来保持追踪内存中的对象,当对象被创建时,该对象的引用计数加1;当对象被销毁时,该对象的引用计数变为0,它会被当做垃圾进行回收。

 引用计数增加的情况:

(1)对象被创建,如x=4。

(2)赋值给其它游戏变量,如y=x。

(3)被作为参数传递给函数,如foo(x)。

(4)作为容器对象的一个元素,如a=[1,x,'33']。

 引用计数减少的情况

(1)对象的引用离开它的作用域,比如, foo(x)函数执行结束时,x引用的对象引用计数减1。

(2)对象的引用被显式地销毁,如del x或del y。

(3)对象的别名被赋值给其他对象,x=789。

(4)对象从窗口对象中被移除,www.sangpi.coma.remove(x)。

 垃圾回收:

(1)垃圾收集器会回收引用计数为0的对象,并清除这些对象占用的内存空间。

(2)当两个对象相互引用时,若它们没有被其它引用所持有,则会被垃圾收集器回收。

(3)垃圾回收机制还有一个循环垃圾回收器,它可以确保释放循环引用对象(a引用b, b引用a)。

 二、内存池机制

在Python中,很多时候申请的内存都是小块内存,这些小块内存在申请不久后又会被释放,这就意味着程序在运行期间会大量地执行申请和释放操作,影响Python的执行效率。为了加快Python的执行效率,Python引入了一个内存池机制,用于管理对小块内存的申请和释放。

Python中所有小于256个字节的对象都使用内存池的分配器。另外,一些Python对象,如整数、浮点数或列表,都拥有独立的内存池,对象之间不会共享这些独立的内存池。也就是说,若分配又释放了大量的整数,用于缓存这些整数的内存池将不再分配给浮点数。

Python如何进行内存管理?上面已经为大家做了详细的介绍, 希望能帮到大家。

版权声明
本文为[mb5f8e5f84eff49]所创,转载请带上原文链接,感谢
https://blog.51cto.com/u_14967986/2896633

  1. python —pandas库常用函数
  2. Python应用matplotlib绘图简介
  3. Python matplotlib高级绘图详解
  4. 入门训练 Fibonacci数列-python实现
  5. Python -二维数组定义
  6. python二进制相加
  7. Python文本处理:解析json格式的数据
  8. 查看python安装路径
  9. Python编程之计算生态
  10. Python-turtle标准库知识小结(python绘图工具)
  11. Python-time标准库知识小结
  12. Python-random标准库知识小结
  13. python安装第三方库的三种方法
  14. python程序的控制结构
  15. Python程序的函数和代码复用
  16. python之组合数据类型
  17. python【力扣LeetCode算法题库】300 最长上升子序列(动态规划)
  18. python【力扣LeetCode算法题库】695- 岛屿的最大面积(深搜)
  19. python【力扣LeetCode算法题库】面试题 01.06-字符串压缩
  20. python【力扣LeetCode算法题库】1160-拼写单词
  21. python【力扣LeetCode算法题库】836- 矩形重叠
  22. python【力扣LeetCode算法题库】409-最长回文串(数学 计数器)
  23. python【力扣LeetCode算法题库】面试题40- 最小的k个数
  24. python【力扣LeetCode算法题库】945- 使数组唯一的最小增量
  25. python【力扣LeetCode算法题库】365- 水壶问题(裴蜀等式)
  26. python【力扣LeetCode算法题库】876- 链表的中间结点
  27. python【力扣LeetCode算法题库】面试题 17.16- 按摩师(DP)
  28. python【力扣LeetCode算法题库】892-三维形体的表面积
  29. python【力扣LeetCode算法题库】999-车的可用捕获量(DFS)
  30. python【力扣LeetCode算法题库】914. 卡牌分组(reduce & collections.Counter)
  31. python【力扣LeetCode算法题库】820- 单词的压缩编码
  32. python【力扣LeetCode算法题库】1162- 地图分析(BFS)
  33. python【力扣LeetCode算法题库】面试题62- 圆圈中最后剩下的数字(约瑟夫环)
  34. python【力扣LeetCode算法题库】912- 排序数组
  35. python【力扣LeetCode算法题库】1111- 有效括号的嵌套深度
  36. python【力扣LeetCode算法题库】289- 生命游戏
  37. python【力扣LeetCode算法题库】12- 整数转罗马数字(打表 模拟)
  38. python【数据结构与算法】内置函数enumerate(枚举) 函数(看不懂你来打我)
  39. python【力扣LeetCode算法题库】13- 罗马数字转整数
  40. python【数据结构与算法】内置函数 zip() 函数(看不懂你来打我)
  41. python【力扣LeetCode算法题库】14-最长公共前缀(列表解压)
  42. python【蓝桥杯vip练习题库】ADV-281特等奖学金
  43. python【蓝桥杯vip练习题库】ADV-69质因数(数论)
  44. python爬不同图片分别保存在不同文件夹中
  45. python打印a-z
  46. python以16进制打印输出
  47. 每天好心情——Python画一棵樱花树
  48. 在终端输入命令打开mac自带的python工具IDLE
  49. Python3的安装(Windows)
  50. Python第一个爬虫项目
  51. Python模拟日志生成
  52. 【邵奈一】Python爬虫专栏(一)之Python爬虫热身
  53. 用 Python 画一棵圣诞树
  54. 你一定想不到,实现一个Python+Selenium的自动化测试框架就这么简单!
  55. 一文快速教你搭建Python+Selenium环境
  56. 一看就会:Python+Appium实现自动化测试
  57. 【邵奈一】Python爬虫专栏(三)之自动登录
  58. Python core developer: the retirement of the father of Python has no impact
  59. Python3 or Python2? Examples explain the differences between the two
  60. Analysis of Linux DHCP server IP allocation Python script