字典、元组、集合的内置方法和垃圾回收机制

今日内容总结

一、字典型内置方法

二、元组型内置方法

三、 集合型内置方法

四、垃圾回收机制

一、字典型内置方法

1 、类型转换

dict()——使用方式
''' 字典型可以转换的类型很少'''
 print(dict(11))  # 整型  报错
 print(dict(11.11))  # 浮点型  报错
 print(dict('owen'))  # 字符串  报错
 print(dict([11, 22, 33, 44]))  # 列表 报错
 print(dict((11, 22, 33, 44)))  # 元组 报错
 print(dict({11, 22, 33, 44}))  # 集合 报错
 print(dict(True))  # 布尔值  报错

2 、字典型内置功能

# 创建一个字符串
l1 = {
    'name': 'owen',
    'age': 20,
    'hobbies': ['running', 'painting']  }
1、按key取值
print(l1['name'])  # 结果为owen
print(l1['123'])  # 直接报错(所以此方法不推荐使用)
print(l1.get('name'))  # 结果为Owen
print(l1.get('123'))  # 结果为none 不会发生报错
print(l1.get('123', '键不存在'))  # 结果为键不存在,第一个如果不在则会none,写了则返回第二个参数
print(l1.get('age', '键不存在'))  # 结果为20
第一个在的话,第二个参数就使用不到
2、修改值——字典型也是可变类型
l1 = {    'name': 'owen',    'age': 20,    'hobbies': ['running', 'painting']     }
print(id(l1))
l1['age'] = 18
print(id(l1))
# 内存地址没有发生改变
3、添加键值对
l1 = {    'name': 'owen',    'age': 20,    'hobbies': ['running', 'painting']     }
l1['height'] = 180
print(l1) 
# 当键不存在时就会新增一个键值对
4、统计字典中键值对的个数(len)
l1 = {    'name': 'owen',    'age': 20,    'hobbies': ['running', 'painting']     }
print(len(l1))  # 结果为 3
5、成员运算也只能判断key键
l1 = {    'name': 'owen',    'age': 20,    'hobbies': ['running', 'painting']     }
print('owen' in l1)  # 结果为false
print('name' in l1)  # 结果为true
6、删除键值对
l1 = {    'name': 'owen',    'age': 20,    'hobbies': ['running', 'painting']     }
del l1['name']  # 通用删除方式
print(l1)
print(l1.pop('age'))
l1.popitem()
print(l1)
7、获取所有的键(keys),所有的值(values),所有的键值对(items)
 用法:
    l1 = {    'name': 'owen',    'age': 20,    'hobbies': ['running', 'painting']     }
print(l1.keys())  # 取所有的键 
print(l1.values())  # 取所有的值
print(l1.items())  # 取所有的键值对
'''结果可以看成列表'''

字典型中需要了解知识

1、update更新字典
用法:
dic = {'l1': 'owen', 'l2': 'Tony', 'l3': 'kery'}
dic.update({'l1': 'wuhua', 'l4': 'xxx'})
print(dic) 
# 当键存在时修改值 键不存在则新增
2、fromkeys()快速生成字典
用法
dic = dict.fromkeys(['k1', 'k2', 'k3'], [111])
print(dic)

3、setdefault()
dic = {'k1': 111, 'k2': 222}
dic.setdefault('k3', 333)
print(dic)  # {'k1': 111, 'k2': 222, 'k3': 333}
# 键不存在时增加一个键值对
dic.setdefault('k1', '***') 
print(dic)  # {'k1': 111, 'k2': 222, 'k3': 333}
# 键存在时,值不发生改变

二、元组型内置方法(不可变的列表)

1、类型转换

支持for循环的数据类型都可以转成元组
print(tuple(11))  # 整型 —— 报错
print(tuple(11.11))  # 浮点型 —— 报错
print(tuple('owen'))  # 字符串
print(tuple([11, 22, 33, 44]))  # 列表
print(tuple({'name': 'owen'}))  # 字典
print(tuple({11, 22, 33, 44}))  # 集合
print(tuple(True))  # 布尔值 —— 报错

2 、元组的特性

当元组内只有一个元素的时候,根据type查看都不是元组型
而在但个元素后加上逗号,他们才能显示为元组型
'''所以在存储数据时,如果内部只有一个元素,加个逗号'''

3 、元组内置操作

1、索引取值
l1 = (1,2,3,4,56)
print(l1[2])  # 结果为3
2、切片操作
l1 = (1,2,3,4,56)
print(l1[0:2])  # 结果为(1, 2)
3、间隔
l1 = (1,2,3,4,56)
print(l1[0:4:2])  # 结果为(1, 3)
4、统计元组内元素的个数(len)
l1 = (1,2,3,4,56)
print(len(l1))  # 结果为5
5、成员运算(in)
l1 = (1,2,3,4,56)
print(56 in l1)  # 结果为true
6、统计某个元素出现的次数(count)
l1 = (1,2,3,4,56)
print(l1.count(2))  # 结果为true
7、元组内的元素不能'修改':元组内各个索引值指向的内存地址不能修改
 l1 = (1,2,3,4,56)
 l1[1] = 123  # 报错
''' 笔试题 '''
   tt = (11, 22, 33, [11, 22])
        tt[-1].append('heiheihei')
        问:执行之后的结果   正确答案选B
            A.报错    B.正常添加   C.不知道   
    """
    tt = (11, 22, 33, [11, 22])
    print(id(tt[-1]))
    tt[-1].append('heiheihei')
    print(id(tt[-1]))
    print(tt)

三、集合内置方法

1 、类型转换

print(set(11))  # 报错
print(set(11.11))  # 报错
print(set('owen'))  # {'e', 'n', 'o', 'w'}
print(set([11,22,33,44]))  # {33, 11, 44, 22}
print(set({'name':'owen'}))  # {'name'}
print(set((11,22,33)))  # {33, 11, 22}
print(set(True))  # 报错
'''整数、浮点型、布尔值无法转换,集合内元素只能是不可变的类型'''

2 、集合两大功能

1、去重
  集合本身自带的特性就是不能出现重复的元素,有的话集合会自动去除
2、关系运算
  判断两个群体的差异,是否有相同的、不同的
l1 = {'owen', 'kery', 'mark', 'jerry'}  # 小李的好友列表
l2 = {'mark', 'tom', 'jerry', 'jack'}  # 小王的好友列表
 # 1.求两个人的共同好友(&)
print(l1 & l2)
 # 2.求小李的单独好友(-)
print(l1 - l2)
 # 3.求两个人所有的好友(|)
print(l1 | l2)
 # 4.求两个人各自的好友(^)
print(l1 ^ l2)

四、垃圾回收机制

'''python底层针对空间的申请和释放都已经设计好了,不需要在执行什么操作'''

1 、引用计数

python中会将引用计数为0的数据清除
 name = 'owen'   # owen引用了一次,计数1
 l1 = name  # owen引用了两次,计数2
'''  使用一次,计数加1  '''

2 、标记清除

当内存空间即将满了的时候 python会自动启动应急机制
    停止程序的运行 ,检查值的引用计数并给计数为0的数据打上标记
    然后一次性清理掉

3 、分代回收

根据值存在的时间长短 将值划分为三个等级(1,2,3)
    	等级1 检测机制每隔5s来一次
        等级2 检测机制每隔20s来一次
        等级3 检测机制每隔100s来一次

今日总结~

posted @ 2022-03-10 18:31  未月  阅读(89)  评论(0)    收藏  举报