python零基础从入门到全栈09-变量进阶

大家好,我是小白小帅,上一章节我们简单了解了一下什么是变量,让大家有了个意识,变量就是用来存储数据的,接下来向小伙伴们像讲故事一样介绍python中对变量的管理以及相关处理机制

变量的内存管理

相信小伙伴们都已经知道了,变量就是用来存储数据的,既然是存储,那肯定要一个空间吧,就像你家盖房子还得申请要一块空地呢,那表示变量的那块地是啥呢,就是内存

都知道计算机本身就有存储器,存储器又分为内存和外存,外存简单来说就是以磁盘为存储载体,就像你做笔记用的笔记本,你的笔记内容就是存在笔记本上的数据。既然磁盘都已经具备存储功能了,为啥还有个内存呢,傻傻分不清楚,内存的出现完全就是为了解决读取磁盘数据效率太慢的问题,所以我们编写的代码都是先加载到内存中运行的,那么我们代码中申请的变量存储空间必然也是在内存中

既然申请变量就像在内存中申请一块空地一样,总得对这些空地进行管理吧,哪些有用的没有的地都得进行管理,所谓变量的内存管理无非就是创建和销毁两部分而已!

好在好在,这些管理内存的操作,贴心的python翻译官已经帮我做过了,不需要我们程序员手动管理内存了,不像c++语言中向内存申请一块空间进行数据存储,有时还需要写手动释放内存的代码,搞不好还会造成内存泄漏的bug

内存池的引入

啥叫内存池呢,就是python解释器自动预先帮我申请的内存空间,作用就是预先在内存中申请一定数量的内存块留作备用,当需要申请新的内存空间时,首先就从内存池中分配内存给这个需求,如果内存池空间不够了再申请新的内存

甚至将一些咱们编程中常用的数字、字母等值先直接加载存储到内存中(小整数池等),这样就大大减少我们程序在运行中申请变量空间的次数,提高了效率

垃圾回收机制

既然说到内存管理,那必然少不了python中自带的垃圾回收机制,垃圾嘛就是没用的东西,编程中没用的东西就是那些用不到的内存空间,你申请了一块地,又不盖房又不用,那这块地就没用,那么就得当成垃圾被回收了,python中也有这个角色,时时扫描运行得代码中有没有没用得垃圾,然后进行回收处理

Python的垃圾回收机制采用引用计数机制为主,标记-清除和分代回收机制为辅的策略。其中,标记-清除机制用来解决计数引用带来的循环引用而无法释放内存的问题,分代回收机制是为提升垃圾回收的效率。

引用计数

Python中有个内部跟踪变量叫做引用计数器,每个变量有多少个引用,简称引用计数。当某个对象的引用计数为0时,就列入了垃圾回收队列。简单来说就是统计你这块地还有没有人在用,有几个人用,如果没人用了,那我就要回收喽

标记-清除

标记-清除用来解决引用计数机制产生的循环引用,进而导致内存泄漏的问题 。 循环引用只有在容器对象才会产生,比如字典,元组,列表

简单来说,现在申请了两块地,这两块地之间有着相通的路,但是与外界隔绝了,看似这两块地还有人在用着,可是根本没有路可以通向这两块地,想用这两块地盖房子都不行,没路!

标记阶段,就是遍历所有的对象,如果是可达的,也就是还有对象引用它,那么就标记该对象为可达,就是统计有没有可以通向这些地的路

清除阶段,再次遍历对象,如果发现某个对象没有标记为可达,则就将其回收

分代回收

前面提到标记清除需要遍历所有对象,就像你拿着土地申请的名单,第一次要跑遍名单上的所有土地,才统计出哪些土地是可以到达的,哪些是需要进行清除的,第二次统计呢?再把名单上的全部跑一边?第十次呢?很显然这效率太低了,基本在全部跑完几次后,咱就知道哪些土地一直有在用,那下一次可以不检查这些土地了,这很符合人类的思维逻辑吧

简单地认为:对象存在时间越长,越可能不是垃圾,应该越少去遍历,这样在执行标记-清除算法时可以有效减小遍历的对象数,从而提高垃圾回收的速度

以上就是对python中内存管理通俗理解,希望对小伙伴们有所帮助!

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值