【一】垃圾回收机制
回收变量所占用内存,节约资源
以引用计数为主,标记清除为辅,进行分代回收
(1)引用计数
(2)标记清除
定时扫描,没人引用就标记,准备回收
(3)分代回收
扫描时间
新生代:新创建没有被引用的
青春代:有经历过垃圾回收,这时然后没被引用
老年代:经历多次了,才扫描到没被引用
【二】深浅拷贝
利用copy模块的copy方法和deepcopy方法
(1)浅拷贝
相当于新的引用了同一个内存地址的值,若修改了,也就表示着修改了内存地址的值,原表会变
(2)深拷贝
相当于说重新给新的开辟了空间,只是刚好该值等于被拷贝的那个值,所以修改时,是不修改原表的
【三】字符编码
(1)发展历史
1.一家独大--》ASICC码
须知:a-z:97-122
A-Z:65-90
0-9:48-57
由于计算机是美国发明的,所以ASICC码只有英文字符和数字
2.诸侯割据--》各国都发明了自己的编码中国GBK,韩国Euc_kr等
各个有各个国家的编码,那么容易出现编码混乱使用,出现乱码的现象
GBK-->一个字节存英文字符
两个字节存中文
3.天下统一Unicode---》utf8
合作开发了一个万国码
记录所有国家字符的对应关系
每个字符统一至少要两个字节存储
缺点:unicode会浪费存储空间和IO时间
所以开发了utf8
优化了unicode存储数据的容量
1bytes存储英文字符
3bytes存储中文字符
如今:内存以Unicode--》硬盘是以utf-8
颜文字--》utf8mb4
Unicode可能会被淘汰,使用utf-8
(2)注意1:python2.7不完善,文件头要加coding:utf-8
(3)注意2:不要随意修改文件的编码格式,否则数据就回不来了
(4)解码decode
将二进制数据变成字符,类似于翻译的意思
(5)编码encode
将字符转成二进制数据,类似于加密的意思
注意:你编码时用的什么编码格式,解码也要用该格式解码,否则会乱码
【四】文件操作
(1)文件打开的两种方法以及区别
1.open(路径,打开文件的模式,编码格式)
2.with语句
eg:1.fp=open('1.txt','r','utf8')
2.with open('1.txt','r','utf8') as fp
区别在于后者,自动会关闭,前者不会关闭,必须要在代码末尾加上
fp.close()
(2)操作模式
1.r只读模式,以只读方式打开文件;如果文件不存在,则会报错;
文件指针将会放在文件的开头。
2.w写覆盖模式,清空后写入,文件指针将会放在文件的末尾。
要注意的点:1.文件存在则打开,没有则新建
2.只要没有close(),一直write,内容接连往下连续写入
3.a追加模式append,不会清空原文件内容;文件指针将会放在文件的末尾。
要注意的点:1.文件存在则打开,没有则新建
2.不带换行功能,只要没有close(),
一直write,内容接连往下连续写入
(3)文本编辑模式wt,rt,at文本图片
(4)二进制数据模式wb,rb,ab一般用于图片,视频
(5)文件操作的扩展模式
1.r+:可读写,如果操作的文件不存在会报错,默认从光标所在位置开始写入
除了读取还可以写入,其余同r,需要注意的是文件指针是在开头
2.w+:除了写入还可以读取,其余同w,需要注意的是文件指针是在末尾。
w+在打开文件时就会先将文件内容清空
3.a+:除了写入还可以读取,其余同w,需要注意的是文件指针是在末尾。
(6)内置方法
读
1.read()一次性全读完
2.readline()每次只读一行,指针移动到下一行的开头
逐行遍历打印
方法一一定要是读模式r
for line in file:
print(line.strip())
方法二
with open('file.txt', 'r') as f:
line = f.readline()
while line:
print(line)
line = f.readline()
3.readlines()把所有数据读出存到一个列表里
4.readable()
5.read(要读几个字符)
写
1.write()清空写入,只要打开文件就会清空不管你后续会不会写入东西
2.writelines将元素逐个写入
(7)seek(偏移位置,模式(0-2))
意思:光标以某模式的位置,偏移几个字符
0:文件开头
1:当前位置
2:文件末尾
(8)tell()查看当前指针所在的索引位置,不允许有参数
【五】栈区和堆区
需要注意的点是
1.栈区存放的时内存地址和变量名
2.堆区存放的时变量值
置于为什么是用堆存变量值
由于变量值可能有的时候是要修改的,大小不定,并且堆的各个节点可以是任意大小,正好合适存变量值的条件