2019-01-14 day16 !!!python内存管理

内存管理

1.数据的存储

内存分为栈区间和堆区间;从底层来看,栈区间的内存的开辟和释放是系统自动管理的,堆区间的内存是由程序员通过代码开辟(malloc)和释放的
                        从python语言角度,栈区间的内存的开辟和释放是系统自动管理的,堆区间的内存管理也已经封装好了,
                        程序员也不需要写代码来开辟空间和释放空间
                        
a.python中变量本身是存在栈区间的,函数调用过程是在栈区间;所有对象都是存在堆区间(python中所有数据都是对象)
b.变量赋值过程:先在堆区间开辟空间将数据存起来,然后将数据对应的地址存到栈区间的变量中。
                数字和字符串比较特殊,赋值的时候不会直接开辟空间,而是先检测之前有没有存储过这个数据,
                如果有就用之前的数据的地址

2.内存释放(垃圾回收机制)原理:

python中的每个对象都有一个属性叫'引用计数',表示当前对象的引用的个数。判断一个对象是否销毁就看对象的引用计数是否为0;
为0的就销毁,不为0就不销毁。


getrefcount函数:
getrefcount(对象)  -> 获取对象的引用计数
from sys import getrefcount


def main():
    list1 = [1, 2]
    # 使用不同的变量存对象地址,会增加引用次数
    list2 = list1
    print(getrefcount(list1))
    list1 = [12, 34]

    list1 = []
    print(getrefcount(list2))


if __name__ == '__main__':
    main()

你可能感兴趣的:(2019-01-14 day16 !!!python内存管理)