垃圾回收



可变类型调用内置方法后改变的是自身, 没有产生数据,无数据可供新变量接收,固定使用方式
l1 = [1, 2, 3,4 ]
l2 = l1.append(5)
print(l1) # [1,2,3,4,5]
print(l2) # None
不可变类型调用内置方法后生成新的数据值,可用一次如果想要重复使用需要用变量接收
垃圾回收机制
'''python会自动帮优化内存空间'''
1引用计数
类似于人与人之间有某种关系
当数据身上的引用计数不为0时表示该数据还有用 不会被删除
当数据身上的引用计数位0时表示该数据没用处了,会被当成垃圾回收
name = 'jason' 引用计数1
name1 = name 引用计数2
del namel 引用计数减一
2标记清楚
专用于解决循环引用将程序中产生的所有数据全部检查一遍之后一次性清楚
3. 分代回收
标记清楚每隔一段时间需要将所有数据排查一遍资源消耗过大尉了减轻垃圾回收机制的资源损耗,开发了三代管理
越往下检查频率越低
字符编码简介
1.只有文本文件才有字符编码的概念
2.计算机内部存取的数据的本质>>> 是二进制 计算机只认识0 1
编程的本质:就是人把自己想命令计算机干的事用编程语言翻译出来并写到文件里,这操作就是程序
3.为什么我们在使用计算机可以敲打出个国文字。
因为存在着人类字符与数字的转换关系
4转换关系不能随便更改,有统一的标准
字符编码表:记录了人类字符与数字的对应关系

字符编码发展史
1.美国编码表:ASCII码
计算机由🇺🇸人发明的 ,🇺🇸人需要让计算机识别英文字符
英文的字符不多加起来不超过127个2的7次方但🇺🇸人考虑到以后可能会加字符所以加了一位以备不时之需2的八次方
ASCII码:只能识别英文字符与数字对应的关系
1bytes来存储字符 等于八个比位
A-Z 65 到90
a-z 97到122
2.多国开始使用计算机
中国编码表:GBK码
每个国家都需要计算机识别各国的字符与数字的对应关系 所以每个国家都会由编码表
GBK内部记录了中文字符英文字符与数字的对应关系
2个bytes 起步存中文生僻字更多
1个bytes 来存储英文
韩国编码表:Euc_kr码:内部记录了韩文字符与数字对应关系
日本编码表:shift_JIS码内部记录了日文与数字的对应关系
此时多国的计算机文本无法直接交互会出现乱码
3.万国码unicode
兼容多国字符
所有的字符全部使用起步2bytes存储
utf针对unicode优化
英文字符采用1bytes
其他字符统一采用3bytes
'''内存使用的是unicode 硬盘使用的是utf8
'''
字符编码的操作
只有字符串的编码可以参与编码解码操作其他的需要先转换为字符串
1.解决乱码的措施
以什么码存的就以什么码解
2编码与解码
编码本质:
将人类的字符按指定的编码转换成计算机可以识别的数字
解码本质:
将计算机可以识别的数字按指定的编码转换成人类可以读懂的字符
编码
s1 = 'jsson' # 编码
res = s1.encode('gbk') # 编码
res1 = res.decode('gbk') # 解码
print(res1)
s1 = '唐忠明' # 编码
res = s1.encode('gbk') # 编码
res1 = res.decode('gbk') # 解码
print(res) # 编码后的结果
print(res1) # 解码操作后结果
编码与解码需要用同一中编码表否则报错
3.解释器
python2 默认使用ASCII
1.文件头需要加coding: utf8
2定义字符串需在字符串前加u
文件操作
1.文件操作
通过编写代码自动操作文件读写
2.文件的本质
双击文件图标就是从硬盘加载数据到内存
写文件后保存就是将数据从内存中刷到硬盘,文件就是操作系统给用户方便快捷操作计算机硬盘的快捷方式之一
3.代码怎么操作文件
open(文件路径,读写方式,字符编码)
第一种
f = open()
f.close()
第二种
with open() as 变量名
子代码在运行之后自动调用close()方法
4.针对文件路径可能有特殊含义字母与撬棍的组合
在字符串的前面加字母r取消特殊含义
作业1.
l1 = ['jason','jason','kevin','oscar','kevin','tony','kevin'] #定义一个列表
jason = 0 #用数据名称定计数器 在列表中出现一次自增一
kevin = 0
oscar = 0
tony = 0
for i in l1: # 用for循环将数据一个个取出比对出现多就自增一
if i == 'jason':
jason += 1
elif i == 'kevin':
kevin += 1
elif i == 'tony':
tony += 1
else:
oscar += 1
print(jason, tony, kevin, oscar)
newdict = dict.fromkeys(['jason', 'tony', 'kevin', 'oscar'],) # 快速创建字典
newdict['jason'] = 2 # 依次给字典赋值
newdict['tony'] = 1
newdict['kevin'] = 3
newdict['osacr'] = 1
print(newdict)

浙公网安备 33010602011771号