美文网首页
python内存管理

python内存管理

作者: 肥肥米怡 | 来源:发表于2017-07-13 13:31 被阅读0次
  • python是动态类型,对象是用于存储数据。在python中,各种数字,字符串,列表,字典都是对象,相当于java的变量
  • 引用,python程序中写的对象名,指向对象
  • 引用和对象分离,是动态类型的核心
Python是怎样管理内存

Python的内存管理是由私有heap空间管理的。所有的Python对象和数据结构都在一个私有heap中。程序员没有访问该heap的权限,只有解释器才能对它进行操作。为Python的heap空间分配内存是由Python的内存管理模块进行的,其核心API会提供一些访问该模块的方法供程序员使用。Python有自带的垃圾回收系统,它回收并释放没有被使用的内存,让它们能够被其他程序使用。

a= 3      #a是引用,指向对象3.     3是存储内存中的一个整数对象
引用计数
x=3.14
y=x
Paste_Image.png

如图,内存创建一个浮点型对象-3.14,然后将引用x指向于对象3.14,对象3.14的引用计数就是1,语句y=x,则是创建了一个指向同一个对象的引用别名y,同时对象3.14的引用计数就是2.

x=3.14
y=x
x=4
y=5

上面的对象3.14的引用计数是0,会被清空


Paste_Image.png
python内存池机制
Paste_Image.png

第0层是C中的malloc,free等内存分配和释放函数进行操作;
 第1层和第2层是内存池,有Python的接口函数PyMem_Malloc函数实现,当对象小于256K时有该层直接分配内存;
 第3层是最上层,也就是我们对Python对象的直接操作;
  在 C 中如果频繁的调用 malloc 与 free 时,是会产生性能问题的.再加上频繁的分配与释放小块的内存会产生内存碎片. Python 在这里主要干的工作有:
   如果请求分配的内存在1~256字节之间就使用自己的内存管理系统,否则直接使用 malloc.这里还是会调用 malloc 分配内存,但每次会分配一块大小为256k的大块内存.
  经由内存池登记的内存到最后还是会回收到内存池,并不会调用 C 的 free 释放掉.以便下次使用.对于简单的Python对象,例如数值、字符串,元组(tuple不允许被更改)采用的是复制的方式(深拷贝?),也就是说当将另一个变量B赋值给变量A时,虽然A和B的内存空间仍然相同,但当A的值发生变化时,会重新给A分配空间,A和B的地址变得不再相同

Paste_Image.png
python 垃圾回收机制

python的垃圾回收以引用计数为主,标记-清除和分代收集为辅。print gc.collect()可以看到python的垃圾

python中到底是“传引用”还是“传值”呢

python中根据对象的可变性来取决于“传引用”还是“传值”。对象的可变性取决于对象类型

  • 基本类型(整型),字符串、元组 属于不可变对象
  • 列表、字典、类以及类的实例 属于可变对象

本文引用:
http://www.cnblogs.com/CBDoctor/p/3781078.html
http://www.jianshu.com/p/6226016cb327

相关文章

  • python内存管理机制

    Python内存管理机制 Python内存管理机制主要包括以下三个方面: 引用计数机制 垃圾回收机制 内存池机制 ...

  • 深入理解Python内存管理与垃圾回收,再也不怕问了(一)

    面试官:听说你学Python?那你给我讲讲Python如何进行内存管理? 我:???内存管理不太清楚额。。。 面试...

  • python内存释放

    Python内存释放 python话说会自己管理内存,实际上,对于占用很大内存的对象,并不会马上释放。举例,a=r...

  • 新手上路?八大秘术助你offer无数(Python初学者/码农必

    话不多说,干货: 1、Python是如何进行内存管理的? Python的内存管理主要有三种机制:引用计数机制、垃圾...

  • 面试日记--python的内存管理

    面试中被问到python的内存管理,只是说是python有自己的内存管理机制,有自己的垃圾回收机制,却不能详细作答...

  • Python基础知识

    一、Python简介 Python 是一种解释型语言,在 Python 中,由于内存管理是由 Python ...

  • python(Class7)

    内存管理之循环引用 在Python3.x中,内存管理问题基本上不会出现,类似与OC中的ARC机制在Python2....

  • Python3学习 - 第二节

    为什么说Python采用的是基于值的内存管理模式? Python采用的是基于值的内存管理方式,如果为不同变量赋相同...

  • iOS ARC

    内存管理 引用计数:Objective-C Python 垃圾收集:C#,Java等 区别 内存管理的基本规则 自...

  • Python内存管理机制

    转载: Python内存管理机制 c/c++中:通过malloc和free进行内存的申请和释放 python/ja...

网友评论

      本文标题:python内存管理

      本文链接:https://www.haomeiwen.com/subject/rwlwhxtx.html