Python中的内存管理

内存管理 包括: ①变量无须事先声明,变量无须指定类型 ②引用计数 ③垃圾回收 ④内存池机制 ①变量定义 不用事先声明变量类型而直接对变量进行赋值。对Python语言来说,对象的类型和内存都是在运行时肯定的。这也是为何咱们称Python语言为动态类型的缘由(这里咱们把动态类型能够简单的归结为对变量内存地址的分配是在运行时自动判断变量类型并对变量进行赋值)。 ②引用计数 python内部使用引用计数,来保持追踪内存中的对象,Python内部记录了对象有多少个引用,即引用计数,当对象被建立时就建立了一个引用计数,当对象再也不须要时,这个对象的引用计数为0时,它被垃圾回收。 对象会在如下状况下引用计数加1: 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.对象从一个窗口对象中移除:myList.remove(x) 5.窗口对象自己被销毁:del myList,或者窗口对象自己离开了做用域。 ③垃圾回收 再也不被使用的内存会被一种称为垃圾收集的机制释放。 注: 垃圾回收机制负责释放内存, 垃圾收集器是一块独立代码, 它用来寻找引用计数为0的对象,而后清除其在内存的空间。它也负责检查虽然引用计数大于0可是也应该被销毁的对象,好比:当两个对象相互引用时,他们自己其余的引用已经为0了。 ④内存池机制 Python的内存机制以金字塔行,-1,-2层主要有操做系统进行操做,   第0层是C中的malloc,free等内存分配和释放函数进行操做;   第1层和第2层是内存池,有Python的接口函数PyMem_Malloc函数实现,当对象小于256K时有该层直接分配内存; 第3层是最上层,也就是咱们对Python对象的直接操做; python中的内存管理机制都有两套实现,一套是针对小对象,就是大小小于256bits时,pymalloc会在内存池中申请内存空间;当大于256bits,则会直接执行new/malloc的行为来申请内存空间。 当建立大量消耗小内存的对象时,频繁调用new/malloc会致使大量的内存碎片,导致效率下降。内存池的概念就是预先在内存中申请必定数量的,大小相等 的内存块留做备用,当有新的内存需求时,就先从内存池中分配内存给这个需求,不够了以后再申请新的内存。这样作最显著的优点就是可以减小内存碎片,提高效率。 浅拷贝和深拷贝。数值、字符串,元组(tuple不容许被更改)采用的是复制的方式(深拷贝?),也就是说当将另外一个变量B赋值给变量A时,虽然A和B的内存空间仍然相同,但当A的值发生变化时,会从新给A分配空间,A和B的地址变得再也不相同。而对于像字典(dict),列表(List)等,改变一个就会引发另外一个的改变,也称之为浅拷贝。
相关文章
相关标签/搜索