# -*- coding: utf-8 -*- # python中自动管理内存的 # 自动管理内存编程语言 例如:object-c python # 手动管理内存编程语言 例如:c # python中的内存管理采用的'引用计数'的方式, 如果一个对象的引用计数为0,该对象占用的内存会被python解释器清空,对象也会消失,如果一个对象的引用计数超过0,这个对象会一直存放在内存中 # Python中是自动管理内存的,实际上是通过"引用计数"的方式来管理内存。当一个对象被创建出来的时候,引用计数为1,当对象被其他对象引用时,引用计数会加1,当对象的引用被删除时,引用计数会-1,当对象的引用计数为0时,该对象所在内存会被系统在合适时间回收 ''' 对象在内存无法释放的情况,称之为内存泄露,内存泄露会导致程序占用内存过多,程序出现卡顿的情况,严重情况可能会导致内存崩溃,程序结束或者闪退 对象多次删除,导致引用计数过渡减少,在之后的代码中有可能导致该对象不可用 ''' # sys 操作系统模块 import sys class People(object): pass # 当创建一个对象时,这个对象的计数为1 p1 = People() # 通过个函数可以查看对象的引用计数 # ps:在这查到的是2,自己创建对象的时候+1,编译程序的时候,解释器+1(不需要我们管理) number = sys.getrefcount(p1) print(number) # 当对象被引用的时候,引用计数会+1 p2 = p1 del p1 del p2 # print(p2) # print(sys.getrefcount(p1)) # # 把对象放入列表中,也会造成计数+1 # list1 = [p1] # print(sys.getrefcount(p1)) # # 创建对象 # p3 = People() # # 给p3添加obj属性,属性值是一个p1对象 也会计数+1 # p3.obj = p1 # print(sys.getrefcount(p1)) # 当引用被删除的时候,引用计数-1 # del p2 # print(sys.getrefcount(p1)) # # # 从列表中移除 引用计数-1 # del list1[0] # print(sys.getrefcount(p1)) # # # 删除对象属性 # del p3.obj # print(sys.getrefcount(p1)) # # 删除创建时的引用计数,p1对象会被从内存中移除 # # del p1 # # 删除之后,对象不可用 # print(sys.getrefcount(p1)) # 删除对象 class Man(object): # 当对象被创建的时候,回去执行初始化函数 def __init__(self): print('Man类的对象被创建了') def eat(self): print('执行了Man类的eat函数...') # 当对象被删除(清除内存)的时候,会执行del函数 def __del__(self): # 可以在对象被删除时,添加一些功能:例如,保存数据..... print('Man类的对象被清除了') m = Man() m.eat() m1 = m # 手动删除对象 引用计数-1 del m m1.eat() # 手动删除对象 应用计数-1 为0 对象被清除 del m1
python中的内存管理
最新推荐文章于 2024-09-30 14:17:43 发布