一、在python中,变量和内存管理的特点
1、变量无需事先声明
2、变量无需指定类型
3、程序员不用关心内存的管理问题
4、变量名会被回收
5、del语句能够直接释放资源
二、内存分配问题
在为变量分配内存的时候,其实实在借用系统资源,那么在用完以后,就会释放借用过来的系统资源。那么,这个工作是谁来完成?那么就是python解释器,我们无需关心内存的分配问题。大家懂的!
三、python是如何处理内存中的对象
3.1、引用计数怎么增加?
地球人都知道,python中,一切都是对象。
小栗子:
x = 89
y = x
解析:
1、创建里一个整型对象,整型对象是啥?那就是89,这个对象并将其(引用)或者说赋值给x,这时候,该对象的引用计数被设置为1
2、再看语句y = x,事实上并没有创建新的对象y,也就是说y不是新的对象,y算是一个别名,也指向了对象89,也就意味着对象89又被引用了一次,所以,该对象的引用计数又增加了1。这时候就变成里2。
3、OK,看到这里,应该大概明白了,python如果要保持追踪内存中的对象,那么使用的计数就叫做:“引用计数”,也就是说在python内部记录着所有使用中的对象各有多少引用。
3.2、内存回收之引用计数减少
1、一个对象被销毁,那么引用计数就会自动减少1,这很好理解。那么,当然这些事情是python解释器完成的,无需人工干预。
小栗子:
x = 23
y = x
x = 45
解析:
整型对象23被创建,并赋值给X,这时候引用计数增1,那么,创建空一个别名y,且x赋值给里y,也可说说是y引用了x,这时候引用计数又自动增1,接着,x = 45,那么也就是说,对象23被销毁了,那么引用计数自动减1,那么x又重新变为了1。如果用del直接删除一个变量,那么也相当于销毁了一个对象,引用计数也会自动减1
四、关于垃圾收集,并回收内存
一句话概括吧,不会被用到内存就会被释放,那么怎样才能知道哪些内存是可回收的呢?那么就是通过垃圾收集器来寻找引用计数为0的对象。垃圾收集器是什么鬼?它是一段独立的代码,也就是python内部的玩意。
本文转自 TtrToby 51CTO博客,原文链接:http://blog.51cto.com/freshair/1866081