* 垃圾回收机制(理论) * 字符编码概述(理论) * 字符编码相关操作 * 代码操作文件
垃圾回收机构
生活中的垃圾一般指的是不要的不用的东西,丢尽垃圾桶 同样计算机 网络空间里也有不要的‘垃圾’ 如果你要是想清除垃圾需要手动向计算机发出指令 才可以达到清除内存目的 但是在使用编写ypthon中程序中,你不需要手动的去自己清除内存 python会自动给你优化 让你在使用编写代码时 不会遇到内存 存满 导致无法编写代码情况 这叫做垃圾回收机构
1.引用计数
当数据值身上的引用计数不为0 就表示该数据值还有存在使用的价值 就不会被删除
同理 如果数据值身上的引用计数为0时就表示该数据值没有利用的价值 就会被垃圾回收机制回收
name = 'make' # 数据值make身上的引用计数就是1 (由name这个变量连接着)
name1 = name # 数据值make身上的引用计数就是2(name1 name 都牵引着make)
del name1 # 数据值make身上的引用计数变为1(make还有一个变量牵引着 不会被清除 )
del name #数据值make身上的引用计数变为0(make 没有任何用处 会被优化清除)
"""避免写出没有任何的变量去牵引的数据值 但是身上还存在引用计数 叫做循环引用 不会被引用计数这种方法给优化清除"""
2.标记清除
专门用于解决循环引用的问题 将内存中程序中产生的所有的数据值全部扫描一遍 避免让无用的数据值存放在内存中 占用内存
如果扫描到循环引用直接进行清除
# 循环引用
l1 = ['jason', ]
l2 = ['kevin', ]
l1.append(l2) # 引用计数为2
l2.append(l1) # 引用计数为2
del l1 # 解除变量名l1与列表的绑定关系 列表引用计数减一
del l2 # 解除变量名l1与列表的绑定关系 列表引用计数减一
# 上述情况列表里还有一个不被用到的数据值,就可以被标记清除给从内存里优化掉
3.分代回收
标记清除每隔一个周期就要对内存里的所有的数据排查一遍 资源消耗过大 浪费资源
为了减轻垃圾回收机制的能源损耗 开发了分批次回收的机制 一共是分三次去甄别数据值的使用频率情况 叫做三代管理 对经常使用的数据值和不经常使用的数据值区别对待检测 越经常使用的数据值检测的频率越低
1.2字符编码简介
1.只针对文本文件才具有字符编码的概念
2.计算机内部的存取数据的本质是只默认使用 二进制
只识别0和1
3.在平常使用计算机时为什么可以随意的写出各国的文字
是因为存在了一个输入的人类字符然后对计算机默认转换的机制关系
4.转换关系不能随便的更改 应该有统一的转换标准
字符编码表>>>:记录了人类的字符于计算机数字的对应关系
1.3字符编码发展史
'''简单来说就是总分总的关系'''
1.总
初期计算机是美国人发明的 自然第一使用人也是美国人 当时美国人只要让计算机认识 识别 本国语言就可以了
因为英语的字符非常的简单 总共加起来不超过127个对应计算机只需要让计算机识别 2的七次方 就可以了 后期为了考虑到加入其他新字符 就多设置识别到 2的八次方
于是 ASCTT码问世:(内部只能识别记录英语字符和数字的关系 每1bytes对应储存一个字符 )
ASCII (American Standard Code for Information Interchange):美国信息交换标准代码是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,并等同于国际标准 ISO/IEC 646。ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符
2.分
随着世界发展 科技进步 计算机出现在了各个国家 但是目前计算机字符识别只能认识转换英语 所以出现了
中国
需要让计算机识别中文 需要开发一套中文的编码表 于是研发出了 GBK 码:内部记录了中文字符、英文字符与数字的对应关系 2bytes == 一个字符 存储中文
韩国
需要让计算机识别韩文 需要开发一套韩文的编码表
Euc_kr码:内部记录了韩文字符、英文字符与数字的对应关系
此时各个国家出现了各种编码表 计算机文件无法直接交互 因为计算机输出识别不了除本国家和英语以外的任何字符 直接出现乱码
3.总
需要一款编码器能识别各国的字符
万国码(unicode):兼容万国字符
所有的字符全部使用2bytes起步存储
utf系列(针对unicode的优化版本)>>>:utf8
英文还是采用1bytes
其他统一采用3bytes
ps:内存使用unicode 硬盘使用utf8
这样各个国家之前计算机用户之间发送文件交流就不会出现乱码的情况了
1.4字符编码实操
1.解决乱码的措施
用什么编码方式输入的就用原编码方式解码就可以了
2.编码与解码
编码:就是把人类的字符转换成计算机识别的字符
解码:就是把计算机识别的字符转成人类能认识的字符
# l1 = '今天下雨了'
# 编码练习
# d2 = l1.encode('gbk')
# print(d2, type(d2)) #b'\xbd\xf1\xcc\xec\xcf\xc2\xd3\xea\xc1\xcb' <class 'bytes'>
'''在python中bytes(b')类型的数据可以直接看成是二进制数据'''
# 解码练习
#d3 = d2.decode('gbk')
#print(d3) # 今天下雨了
3.解释器层面
python2中默认的编码是ASCTT码(因为当时开发的时候 unicode 还没有研发出来 所以不支持)
在python2中需要解码时
1。需要添加文件头
# coding:utf8
2.定义支付串
需要在字符串的前面加 U
# 完成后就可以进行解码了
1.5文件操作简介
1.文件操作
通过编写代码自动操作文件读写
2.什么是文件
在计算机双击文件图标 打开的过程是从硬盘加载数据到内存 然后打开呈现
写完文件后的保存就是将内存中的数据保存到硬盘
3.如何用代码操作文件
open(文件路径,读写模式,字符编码)
方式1
f = open()
f.close()
方式2
th open() as 变量名:
子代码运行结束之后自动调用close()方法
4.针对文件路径需要注意 可能存在特殊含义(字母与撬棍的组合)
在字符串的前面加字母r即可取消特殊含义
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)