垃圾回收机制和面向对象

垃圾回收机制

# 不能被程序访问到的数据,就称之为垃圾
引用计数
# 引用计数是用来记录值的内存地址被记录的次数的

# 每一次对值地址的引用都可以使该值的引用计数 +1
# 每一次对值地址的释放都可以使该值得引用计数 -1

# 当一个值的引用计数为0时,该值就会被系统的垃圾回收机制回收
循环导入
ls1 = [666]
ls2 = [888]
ls1.append(ls2)
ls2.append(ls1)

# 循环导入会导致某些值得引用计数永远大于1
标记删除
# 标记:标记的过程其实就是,遍历所有的GC Roots对象(栈区中的所有内容或者线程都可以作为GC Roots对象),然后将所有GC Roots的对象可以直接或间接访问到的对象标记为存活的对象

# 删除:删除的过程将遍历堆中所有的对象,将没有标记的对象全部清除掉
分代回收
# 分代:指的是根据存活时间来为变量划分不同等级(也就是不同的代)
'''
新定义的变量,放到新生代这个等级中,假设每隔1分钟扫描新生代一次,如果发现变量依然被引用,那么该对象的权重(权重本质就是个整数)加一,当变量的权重大于某个设定得值(假设为3),会将它移动到更高一级的青春代,青春代的gc扫描的频率低于新生代(扫描时间间隔更长),假设5分钟扫描青春代一次,这样每次gc需要扫描的变量的总个数就变少了,节省了扫描的总时间,接下来,青春代中的对象,也会以同样的方式被移动到老年代中。也就是等级(代)越高,被垃圾回收机制扫描的频率越低
'''

# 回收:依然是使用引用计数作为回收的依据

面向对象

''''
1、面向过程编程
    核心是"过程"二字,过程指的是解决问题的步骤,即先干什么再干什么
    基于该思想编写程序就好比在编写一条流水线,是一种机械式的思维方式

    优点:复杂的问题流程化、进而简单化
    缺点:可扩展性差

2、面向对象
    核心"对象"二字,对象指的是特征与技能的结合体,
    基于该思想编写程序就好比在创造一个世界,你就是这个世界的上帝,是一种
    上帝式的思维方式

    优点:可扩展性强
    缺点:编程的复杂度高于面向过程
    
重点:面向对象的核心体现是将数据和处理数据的程序封装到对象中
'''
类与对象
# 类:具有相同特征与行为事物集合体的抽象
# 对象:现实中,实际存在的各个事物,也就是抽象出的类的具体表现

# 定义类
class Student:
    pass

# 产生对象
stu = Student()

# 添加特征与行为
stu.name = 'Owen'
stu.get_age = lambda age: age
初始化方法
class Student:
    def __init__ (self, name):
        self.name = name
属性的查找顺序
class Student:
    school = "Oldboy"
    def __init__ (self, name):
        self.name = name
对象方法与类方法
class Student:
    school = "Oldboy"
    def __init__ (self, name):
        self.name = name
        
    def study(self):
        print(self.name + '学习')
        
    @classmethod
    def school_time(cls):
        print('8点半')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值