python中的内存管理

# -*- 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MarkJhon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值