基本数据类型内置方法补充2和垃圾回收机制
字典内置方法
类型转化
# print(dict(11)) # 报错
# print(dict(11.11)) # 报错
# print(dict(True)) # 报错
# print(dict('success')) # 报错
# print(dict({'height': '175cm', 'weight': '55kg'})) # 报错
# print(dict((90, 80, 60, 50, 40))) # 报错
# print(dict({88, 80, 60, 50, 40})) # 报错
print(dict([('hight', '175cm'), ['weight', 55]])) # {'hight': '175cm', 'weight': 55}
常见操作
dict1 = {'name': 'tom', 'height': '175cm', 'weight': 55}
# 1.按key取值
print(dict1['name']) # tom,键存在
print(dict1['weight']) # 注意键不存在直接报错
# 涉及到字典取值,下面的方式使用频率更高
print(dict1.get('name')) # tom,键存在
print(dict1.get('age')) # 键不存在,返回的结果None
print(dict1.get('height', '取到值就不显示')) # 175cm
print(dict1.get('age', '字典内没有这个键')) # 字典内没有这个键
# 2.修改值,字典也是可变类型
print(id(dict1)) # 2297114637008
dict1['weight'] = 66 # 键存在就修改值
print(dict1, id(dict1)) # {'name': 'tom', 'height': '175cm', 'weight': 66} 2297114637008
# 3.添加键值对
dict1['age'] = 22 # 键不存在则是新增一个键值对
print(dict1) # {'name': 'tom', 'height': '175cm', 'weight': 66, 'age': 22}
# 4.统计字典中键值对的个数
print(len(dict1)) # 4
# 5.成员运算,只能判断key
print('hobby' in dict1) # False
print('name' in dict1) # True
# 6.删除键值对
del dict1['name'] # 通用的删除方式
print(dict1) # {'height': '175cm', 'weight': 66, 'age': 22}
print(dict1.pop('age')) # 22,尾部弹出
print(dict1) # {'height': '175cm', 'weight': 66}
dict1.popitem() # 随机弹出一个,几乎用不到
print(dict1) # {'height': '175cm'}
# 7.获取所有的K,所有的V,所有的K:V键值对
dict2 = {'name': 'tom', 'height': '175cm', 'weight': 55}
print(dict2.keys()) # dict_keys(['name', 'height', 'weight']),可以看成是列表
print(dict2.values()) # dict_values(['tom', '175cm', 55]),可以看成是列表
print(dict2.items()) # dict_items([('name', 'tom'), ('height', '175cm'), ('weight', 55)]),可以看作是列表套元组
需要了解的操作
# 1.update更新字典
dict3 = {'name': 'tom', 'height': '175cm', 'weight': 55}
dict3.update({'height': '180cm', 'hobby': 'sleep', 'country': 'USA'})
print(dict3) # {'name': 'tom', 'height': '180cm', 'weight': 55, 'hobby': 'sleep', 'country': 'USA'},K存在则修改V,K不存在则新增K:V键值对
# 2.fromkeys()快速生成字典
dic = dict.fromkeys(['k1', 'k2', 'k3'], ['v'])
print(dic) # print(dic)
元组内置方法
类型转换
# 所有支持for循环的数据类型都可以转成元组
# print(tuple(11)) # 报错
# print(tuple(11.11)) # 报错
print(tuple('trump')) # ('t', 'r', 'u', 'm', 'p')
print(tuple([88, 80, 60, 50, 40])) # (88, 80, 60, 50, 40)
print(tuple({'name': 'trump'})) # ('name',)
print(tuple({88, 80, 60, 50, 40})) # (40, 80, 50, 88, 60)
# print(tuple(True)) # 报错
元组的特性
t1 = (88, 80, 60, 50, 40)
print(type(t1)) # <class 'tuple'>
t2 = (119)
print(type(t2)) # <class 'int'>
t3 = (110.120)
print(type(t3)) # <class 'float'>
t4 = ('obama')
print(type(t4)) # <class 'str'>
# 当元组内只有一个元素的时候,要在元素的后面加上逗号
t5 = (119,)
print(type(t2)) # <class 'tuple'>
t6 = (110.120,)
print(type(t3)) # <class 'tuple'>
t7 = ('obama',)
print(type(t4)) # <class 'tuple'>
常用操作
t8 = (100, 90, 80, 60, 50, 40, 30, 20)
# 1.索引取值
print(t8[0]) # 100
print(t8[-1]) # 20
# 2.切片操作
print(t8[1:4]) # (90, 80, 60)
print(t8[-1:-4:-1]) # (20, 30, 40)
print(t8[-4:-1]) # (50, 40, 30)
# 3.间隔
print(t8[2:7:2]) # (80, 50, 30)
# 4.统计元组内元素的个数
print(len(t8)) # 8
# 5.成员运算
print(50 in t8) # True
# 6.统计某个元素出现的次数
print(t8.count(60)) # 1
# 7.元组内元素正常情况下无法修改(特殊情况,元组里面有可变类型),元组内各个索引值指向的内存地址不能修改
# t8[0] = 120
集合内置方法
类型转化
# print(set(11)) # 报错
# print(set(11.11)) # 报错
# print(set(True)) # 报错
print(set('success')) # {'c', 'u', 'e', 's'}
print(set((90, 80, 60, 50, 40))) # {40, 80, 50, 90, 60}
print(set({88, 80, 60, 50, 40})) # {80, 50, 40, 88, 60}
print(set({'name': 'jason'})) # {'name'}
# print(set(100, [11, 22])) # 报错
# print(set(100, (11, 22))) # 报错
两大功能
去重
集合内不能出现重复的元素,自带去重特性,自动去掉重复的元素
set1 = {1, 1, 1, 2, 6, 9, 7, 5, 2, 2, 5, 4, 6, 7, 5, 2, 2, 5, 4, 8, 6, 5, 5, 2, 4, 5, 2, 4, 2, 5, 5, 2, 5, 2}
print(set1) # {1, 2, 4, 5, 6, 7, 8, 9}
l = ['a', 'b', 'c', 'a', 'a', 'f', 'f', '11', '22']
set1 = set(l)
l = list(set1)
print(l) # ['f', 'b', '22', 'c', 'a', '11']
关系运算
判断两个群体内的差异,例如共同关注,独有好友,共同点赞
f1 = {'trump', 'bush', 'rose', 'michael', 'obama'} # 小李的qq好友列表
f2 = {'obama', 'tom', 'trump', 'jack', 'putin'} # 小王的qq好友列表
# 1.求两个人的共同好友
print(f1 & f2) # {'obama', 'trump'}
# 2.求小王的单独好友
print(f2 - f1) # {'putin', 'jack', 'tom'}
# 3.求两个人所有的好友
print(f1 | f2) # {'bush', 'jack', 'trump', 'tom', 'rose', 'putin', 'michael', 'obama'}
# 4.求两个人各自的好友
print(f1 ^ f2) # {'tom', 'bush', 'jack', 'rose', 'putin', 'michael'}
垃圾回收机制
1.引用计数
python会将引用计数为0的数据清除
name = 'trump' # trump引用计数为1
a = name # trump引用计数为2
b = 1 # 1引用计数由1变为0,下一步2赋值给b时
b = 2 # 2引用计数为1
2.标记清除
当内存空间即将溢出的时候,python的应急机制会自动启动,停止程序的运行,然后挨个检查值的引用计数并给计数为0的数据打上标记,然后一次性清理掉。
3.分代回收
根据值存在的时间长短,将值划分为三个等级
等级1 检测机制每隔5s检测一次
等级2 检测机制每隔1min检测一次
等级3 检测机制每隔5min检测一次