当内存中的数据被变量名绑定时,这种绑定关系就是引用计数。一个绑定关系就是一个引用计数。
2.引用计数的特点?(为什么要有引用计数)1>引用计数是python垃圾回收机制是否执行的判断条件
2>当某个数据的引用计数不为0的时候,python的垃圾回收机制不会将该数据回收并清除。
循环引用是引用计数中的一个特例,它符合引用计数为0被垃圾回收机制回收的标准,但是不会被垃圾回收机制回收掉。
1.2标记清除 1.为什么要有标记清除?标记清除清除就是为了解决上面的循环引用的问题而产生的一种新的方法
2.什么是标记清除?将内存中的数据整体排查,把存在循环计数的做上标记,最后一次性清除掉
3.标记清除真的很好吗?不,由于隔段时间它都会将所有的数据排查一遍,资源消耗有点大
1.3分代回收 1.为什么要有分代回收?为了解决上面标记清除资源消耗的问题
2.什么是分代回收?分代回收就是将数据根据运行(调用)频率的高低分为3个等级
1> 初生代:所有新产生的数据都会放到这里,这里标记清除的排查时间间隔最短
2> 青春代:经过一段时间,会把调用频率高一点的数据放到这里,这里标记清除的配查时间间隔次之
3>老年代:最后会将调用频率非常高的数据放到这里,这里标记清除的配查的时间间隔最长
把人类能够识别的字符通过特定的方式转换成计算机认识的字符的过程
1>切记:只有文本文件才具有字符编码的能力
2>字符编码表:记录人类的字符和数字之间一一对应关系的一张表
2.2字符编码发展史 阶段1:唯我独尊1:ASCII码的时代:
刚开始,只有美国人使用计算机,所以他们创造的字符编码只有英文以及英文相关的符号和数字之间的对应关系,也就是ASCII码
2:ASCII码特点:1bytes来存储字符
阶段二:群雄割据1:随着计算机走向全世界,每个国家都创造了自己国家的字符编码表,如大中国的GBK,小日本的shift_JIS码
2: 缺点:没有一个统一的标准,编码互相之间沟通不了
阶段3:天下一统1:为了解决上述的问题,产生了一个统一的编码表:(万国码unicode),兼容全世界各国的编码
2:万国码特点:所有的字符全部使用2bytes起步存储
3:最后为了优化万国码产生了utf家族(utf8),utf的特点:英文还是采用1bytes 其他统一采用3bytes
2.3字符编码实操s1 = 'China是中国的意思'
# 编码
res = s1.encode('utf8')
print(res, type(res))
# 解码
res1 = res.decode('utf8')
print(res1)
“”"
注意事项:
1.解决乱码的措施: 当初以什么编码存的就以什么编码解
2.python2默认的编码是ASCII码
解决方式:
在文件头加上: # coding:utf8
定义字符串 需要在字符串的前面加u
3.python3默认的编码是utf8
4.编码(人类的字符 >> > 计算机的字符) 解码(计算机的字符 >> > 人类的字符)
5.在python中bytes类型的数据可以直接看成是二进制数据
知识点3:文件操作 1.什么是文件操作?通过代码的形式操作文件
2.什么是文件?文件其实就是操作系统暴露给用户操作计算机硬盘的快捷方式
3.如何代码操作文件? open(文件路径,读写模式,字符编码)
#方式1
f = open()
f.close()
# 方式2
with open() as 变量名:
# 子代码运行结束之后会自动调用close()方法
# 4.针对文件路径需要注意 可能存在特殊含义(字母与撬棍的组合)
# 在字符串的前面加字母r即可取消特殊含义
with open('a.txt', 'r', encoding='utf8') as f:
f.read()
练习
# 练习1
"""
1.统计列表中每个数据值出现的次数并组织成字典战士
eg: l1 = ['jason','jason','kevin','oscar']
结果:{'jason':2,'kevin':1,'oscar':1}
真实数据
l1 = ['jason','jason','kevin','oscar','kevin','tony','kevin']
"""
l1 = ['jason', 'jason', 'kevin', 'oscar', 'egon', 'alex', 'socar', 'kevin']
dic1 = {}
for i in l1: # 第一次循环当把列表中的数据当成字典的K添加到字典中
dic1[i] = 0 # 每个K的值都统一成0
for j in l1: # 第二次循环把列表中重复的数据值的个数叠加到键对应的值中
if j == i:
dic1[i] += 1
print(dic1)
# 练习2
"""
2.编写员工管理系统
1.添加员工信息
2.修改员工薪资
3.查看指定员工
4.查看所有员工
5.删除员工数据
6.退出整个程序
提示:用户数据有编号、姓名、年龄、岗位、薪资
数据格式采用字典:思考如何精准定位具体数据>>>:用户编号的作用
"""
employee_informations_dicts = {1: {'name': 'jason', 'age': 18, 'post': 'teacher', 'salary': 50000}}
s1 = '''
1.添加员工信息
2.修改员工薪资
3.查看指定员工
4.查看所有员工
5.删除员工数据
6.退出整个程序
'''
self_dict = {}
hobby_list = []
while True:
num = input(f'{s1}number:').strip()
# 1.添加员工信息
if num == '1':
Name = input('name:').strip()
for i in employee_informations_dicts:
if employee_informations_dicts[i]['name'] == Name:
print('用户信息已存在')
continue
else:
Id = len(employee_informations_dicts) + 1
Age = input('age:').strip()
Post = input('post:').strip()
Salary = input('salary:').strip()
self_dict['name'] = Name
self_dict['age'] = Age
self_dict['post'] = Post
self_dict['salary'] = Salary
employee_informations_dicts[Id] = self_dict
# 2.修改员工薪资
if num == '2':
Name = input('name:').strip() # 根据姓名查找员工
New_salary = input('new_salary:').strip()
for i in employee_informations_dicts:
if employee_informations_dicts[i]['name'] == Name:
employee_informations_dicts[i]['salary'] = New_salary
# 3.查看指定员工
if num == '3':
Name = input('name:').strip() # 根据姓名查找员工
for i in employee_informations_dicts:
if employee_informations_dicts[i]['name'] == Name:
age = employee_informations_dicts[i]['age']
post = employee_informations_dicts[i]['post']
salary = employee_informations_dicts[i]['salary']
print(f'员工{i}:{Name}的年龄是:{age} 职位是:{post} 薪资是:{salary}')
# 4.查看所有员工信息
if num == '4':
print(employee_informations_dicts)
# 5.删除员工数据
del_id = []
if num == '5':
Name = input('name:').strip() # 根据姓名查找员工
for i in employee_informations_dicts:
if employee_informations_dicts[i]['name'] == Name:
del_id.append(i)
del employee_informations_dicts[del_id[0]]
# 6.退出整个程序
if num == '6':
break



