垃圾回收机制
垃圾回收机制是用来回收不可用的变量值所占用的内存空间,python会自动申请和释放内存空间,主要通过引用计数、标记清除、分代回收来帮助释放内存空间
引用计数
当数据值身上的引用计数为0时,占用的内存地址就会被垃圾回收机制回收
当数据值身上的引用计数不为0时,表示数据值还有用,就不会被垃圾回收机制回收
eg:
name = 'nana' # 数据值nana身上的引用计数为1
name1 = name # 数据值nana身上的引用计数为2
del name1 # 数据值nana身上的引用计数为1
del name # 数据值nana身上的引用计数为0 此时会被垃圾回收机制回收
ps:循环引用中,引用计数不为0,所以不能够垃圾回收机制,得使用标记清除来解决
标记清除
用来解决循环引用的问题,将内存中程序产生的数据值全部检查一遍,如果存在循环引用,则打上标记,然后一次性清除
eg:循环引用
l1 =['nana',]
l2 = ['xiaoxiao',]
l1.append(l2) # 列表的引用计数为2
l2.append(l1) # 列表的引用计数为2
print(l1) # ['nana', ['xiaoxiao', [...]]]
print(l2) # ['xiaoxiao', ['nana', [...]]]
del l1 # 列表的引用计数变为1
del l2 # 列表的引用计数变为1
分代回收
在多次扫描的情况下,变量都没有被进行垃圾回收机制,那么会进行分代回收,垃圾回收机制的检测频率也会逐一降低
标记清除每隔一段时间就会就会将所有数据的引用计数遍历一次,使之资源内存消耗过大,为了减少垃圾回收机制的资源损耗 将其分为三代(新生代,青春代,老年代)管理
字符编码
字符编码简介
1.只有文本文件才有字符编码的概念
2.计算机内部存取数据的本质>>>:二进制(计算机只认识0、1)
3.为什么我们在使用计算机的时候可以随意敲出各国文字
存在一个人类字符与数字转换的关系
4.字符编码表:记录了人类的字符与数字的对应关系
字符编码发展史
第一阶段:一家独大(计算机只能识别英文)
1.计算机是由美国人发明的,美国人需要让计算机识别英文字符
2.一个英文字符对应 1bytes,英文的所有字符加起来不超过127个(2**7),美国人考虑到后续可能出现新的字符 所以加了一位以备不时之需(2**8=256)
3.ASCII码:记录了英文字符与数字对应的关系