python的内存管理

本文深入探讨了Python的内存管理机制,包括对象的创建、引用计数、垃圾回收以及内存池等关键概念。通过实例分析,揭示了Python如何有效地管理和释放内存,帮助开发者更好地理解和优化Python程序的性能。
摘要由CSDN通过智能技术生成
#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(不需要我们管理)
print(sys.getrefcount(p1))
#当对象被引用的时候,引用计数会+1
p2 = p1
del p1
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
print('***********')



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值