python中垃圾回收机制与字符编码简介

垃圾回收(Garbage Collection)机制

'''python会自动申请释放内存空间,python底层进行内部管理,无需像其它编程语言手动编写代码'''
具体怎么进行?哪些可以删除?哪些不能删除?分为三个部分:引用计数标记清除分带回收
1、引用计数
      当数据值身上的引用计数不为0时,表示该数据值为有效数据,不会被删除
      当数据值身上的引用计数为0时,表示该数据无效为垃圾数据,则会被python垃圾回收机制回收
 eg:name = ‘curry’   # 数据值curry身上的引用计数就是1
     name = ‘name’    # 数据值curry绑定两个数据,此时的引用计数是2
     del namel        # 数据值curry身上删除1个,此时的引用计数为1
'''引用计数存在1处注意事项>>>循环引用'''
2、标记清除
   # 循环引用
   l1 = ['curry']
   l2 = ['kevin']
   l1.append(l2)  # 此时引用计数为2
   l2.append(l1)  # 此时引用计数为2
   del l1         # 解除变量名l1与列表的绑定关系 列表引用计数减一
   del l2         # 解除变量名l2与列表的绑定关系 列表引用计数减一
3、分代回收
     标记清除每隔一段时间就需要将所有的数据筛查一遍 资源消耗过大
     为了减轻垃圾回收机制的资源消耗 开发了三代管理:初生代、青春代、老年越往下检测的频率越低!!!

字符编码简介

1、只有文本文件才有字符编码的概念 只针对文本文件 视频 音频 图片均不
2、计算机内部存储的本质>>>二进制
计算机只认识0和1组合
3、为什么我们在使用计算机的时候可以随意敲出各国文字?
因为存在一个人类字符与数字的转换关系
4、转换关系不能随变更改 应该有统一的标准
字符编码表>>>:记录了人类字符与数字的对应关系,利用字符编码表让计算机帮你写出你想要的字符

字符编码发展史

1、一家独大
计算机是在1889年由美国科学家赫尔曼·何乐礼研制出以电力为基础的电动制表机,用以储存计算资料 美国人需要让计算机识别英文字符
   ps:英文所有的字符加起来不超过127个(2的七次方) 但是美国人考虑到后续可能出现新的字符 以备不时之需就多加了一位(2的八次方)
   ASCII码:内部只记录了英文字符与数字的对应关系
   1bytes来存储字符

 

 

 

        A-Z  65-90
       a-z  97-122
    ps:此时的计算机只能识别英文 不能识别其他文字
2、群雄割据
中国
  需要计算机识别中文 开发一套中文的编码表
          GBK码:内部记录兼容了中文字符、英文字符与数字的对应关系
          2bytes起步进行存储中文(遇到生僻字使用更多字母)
                1bytes存储英文
   韩国
  需要计算机识别韩文 开发一套韩文的编码表
        Euc_kr码:内部记录兼容了韩文字符、英文字符与数字的对应关系
   日本
  需要计算机识别日文 开发一套日文的编码表
       shift_JIS码:内部记录兼容了日文字符、英文字符与数字的对应关系
   ps:此时各国计算机文件无法直接交互 会出现乱码的情况(因为字符解释引用不同的编码本)
3、天下一统
万国码(unicode):兼容万国字符,是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
            所有的字符全部使用2bytes起步存储
    utf家族(Unicode Transformation Format):针对unicode的优化版>>>utf8
               英文还是采用1bytes
               其他统一采用3bytes
    ps:现在内存用的unicode可以兼容万国 硬盘用的utf8减少存储空间 为了减少IO操作的时间

字符编码实操

'''只有字符串才可以参与编码和解码 其他数据类型需要先转换成字符串才可以...'''
1、解决乱码的措施
当初以什么编码存的就用什么编码解,保持一致
2、编码与解码
编码(人类的字符转换成计算机的字符)
  将人类的字符按照指定的编码转换成计算机可以识别的数字
     解码(计算机的字符转换成人类的字符)
  将计算机能够识别的数字按照指定的编码转成人类可以识别的
       s1 = '好好学习'
       # 编码
       res = s1.encode('utf8')
       print(res, type(res))
       '''
      在python中bytes类型的数据可以直接看成二进制数据
      '''
       # 解码
       res1 = res.decode('utf8')
       print(res1)
3、解释器层面
   unicode于1994年正式发布1.0版本
   python2第一个公开发行版发行于1991年,默认的编码是ASCII
  1、文件头
      # coding:utf8
        2、定义字符串
            需要在字符串的前面加u
   python3默认的编码utf8
文件操作简介
1、文件操作
通过编写代码自动操作文件被写
2、什么是文件?
双击文件图标是从硬盘加载数据到内存 写文件之后保存是为了将内存中的数据保存到硬盘
    文件就是操作系统暴露给用户操作计算机硬盘的快捷方式!!!
3、如何代码操作文件?
open(文件路径,读写模式,字符编码)

方式1
f = open()
   f.close()
   res = open('a.txt','r',encoding='utf8')
   print(res.read())
   res.close()
方式2
with open() as 变量名:
   with open('a.txt', 'r', encoding='utf8')
print(f.read())
  子代码运行到结束之后自动调用close()方法
4、针对文件路径需要注意 可能存在特殊含义(字母与撬棍的组合)
在字符串的前面加字母r即可取消特殊含义
 
posted @ 2022-06-28 21:13  初学者-11  阅读(61)  评论(0编辑  收藏  举报