当前位置:首页 > 内存 > 正文

python变量内存分配

  • 内存
  • 2024-06-10 11:07:55
  • 8096

一、BAT面试题28:Python是如何进行内存管理的

Python的内存管理一般考虑以下三个方面:

1)对象引用计数机制(四自增五自减)

2)垃圾收集机制(手动和自动)。,生成回收)

3)内存池机制(大m,小p)

1)对象引用计数机制

Python来跟踪内存对象使用引用计数的简单技术。count(a)可以检查对象a的引用计数,但是比正常计数大1,因为调用函数时传入了a,使a的引用计数增加了1

2)垃圾收集机制

吃多了总会发胖,Python也是如此。随着Python中的对象越来越多,它们占用的内存也越来越多。不过,您不必太担心Python的大小。它会在适当的时候“减肥”,启动垃圾收集,淘汰掉无用的对象。一个基本原理:当Python中一个对象的引用计数下降到0时,就意味着没有引用指向该对象和该对象。对象太变成了可以回收的垃圾

例如,一个new对象被分配了引用时,该对象的引用计数变为1。当该引用被删除时,该对象的引用计数变为1达到0时,该对象可以进行垃圾回收。

然而,减肥是昂贵且费力的。在垃圾收集期间,Python无法执行其他任务。频繁的垃圾回收显着降低了Python的工作效率。如果内存中的对象不多,则没有必要总是启动垃圾回收。

Python仅在特定条件下自动启动垃圾收集。Python运行时,会记录对象分配(object
allocation)和对象释放(objectdeallocation)的次数。当两者之间的差异超过某个阈值时,垃圾收集就会开始。

我们可以通过gc模块的get_threshold()方法来显示阈值。

3)内存池机制

Python分为大小内存:(256KB是大小内存的限制)

1内存使用量malloc作业

2。使用内存池分配小内存

Python中的内存管理机制有两套实现。其中之一是针对小对象,如果大小小于256KB,Pymalloc会在内存池中申请空间。如果大小大于256KB,系统会直接执行malloc行为来申请磁盘空间。


二、Python如何进行内存管理

Python如何管理内存?

答:从三个方面来说,一是对象引用计数机制,二是垃圾回收机制,三是内存池机制。

1.对象引用计数机制

Python在内部使用引用计数来跟踪内存中的对象。

增加引用计数:

1重命名对象

2.将其放入容器(例如列表、元组或字典)中

引用计数减少的情况:

1使用part语句显式销毁对象别名。

2或者是重新赋值

count()函数可以检索对象当前的引用计数

大多数情况下,引用计数比你想象的要大得多。对于不可变数据(例如数字和字符串),解释器在程序的不同部分之间共享内存以节省内存。

相关推荐:《Python视频教程》

2垃圾回收

1当对象的引用计数归零时,就会被垃圾回收。该机处理它。

2当两个对象a和b相互引用时,del语句可以减少a和b的引用计数,并销毁用于引用底层对象的名称。但是,由于每个对象都包含对其他对象的应用程序,因此引用计数不会重置为零,并且该对象也不会被销毁。(这会导致内存泄漏)。为了解决这个问题,解释器定期执行循环检测器,搜索具有不可用对象的循环并将其删除。

3.内存池机制

Python提供了内存垃圾回收机制,但是它将未使用的内存放入内存池中,而不是返回给操作系统。

oc机制。为了加快Python的执行效率,Python引入了内存池机制来管理小块内存的申请和释放。

2Python中所有小于256字节的对象都使用pymalloc实现的分配器,而大对象则使用系统malloc。

3Python对象,例如整数、浮点数和列表,都有自己独立的私有内存池,并且它们的内存池在对象之间不共享。这意味着,如果分配和释放大量整数,则用于缓存这些整数的内存将无法再分配给浮点数。