# 集合
"""
集合是一个可变的数据类型,但是它里面的元素必须是不可
变的数据类型,无序,不重复(去重)
也是{} 大括号
"""
1 # set2 = {1,2,3,[1,2,3],{"name": "lizy"}} # 报错 里面内容必须是不可变的 2 # print(set2) 3 4 # set1 = {"qaz", "qwe", "rfv"} 5 6 # 增加 7 # add 8 # set1.add("lizy") 9 # print(set1) 10 11 # update 12 # set1.update("abcd") # {'d', 'qaz', 'c', 'rfv', 'b', 'a', 'qwe'} 13 # print(set1) # 把字符串‘abcd’无序的添加到字典当中 14 15 # 删除 16 # set1 = {"123", "456", "qaz"} 17 # set1.pop() # 随机删除 18 # print(set1.pop()) # 有返回值 19 # print(set1) 20 21 # 按元素去删 22 # set1.remove("123") 23 # print(set1) 24 25 # 清空列表 26 # set1 = {"123", "456", "qaz"} 27 # set1.clear() 28 # print(set1) 29 30 31 # 面试题 32 # 把列表里重复的元素去掉 li = [1, 2, 33, 44, 33, 44, 5, 5] 33 34 # li = [1, 2, 33, 44, 33, 44, 5, 5] 35 # set1 = set(li) 36 # print(set1) 37 # li = list(set1) 38 # print(li) 39 40 41 # set 本身是可变的数据类型 42 # 可以用 frozenset 变成不可变的 43 44 # s = frozenset("lizy") 45 # print(s, type(s)) # frozenset({'y', 'l', 'z', 'i'}) <class 'frozenset'> 46 47 # s1 = {1, 2, 3, 4} 48 # print(s1, type(s1)) 49 50 51 52 # 删除列表下标为奇数的元素 53 # lis = [1, 2, 3, 4, 5, 6, 7, 8, 9] 54 # lis1 = [] 55 # for i in lis: 56 # if i % 2 != 0: 57 # lis1.append(i) 58 # lis = lis1 59 # print(lis) 60 61 # 删除字典里面有"k"的键 62 # dic = {"k1": "v1", "k2": "v2", "a3": "v3"} 63 # dic1 = {} 64 # for i in dic: 65 # if "k" not in i: 66 # dic1.setdefault(i, dic[i]) 67 # dic = dic1 68 # print(dic) 69 # !!! 注意 在列表和字典循环的时候 不要去删除它们里面的元素!! 70 71 # 面试题 72 # 元祖 73 # tu = (1) 74 # tu1 = (1,) 75 # print(tu, type(tu)) # <class 'int'> 76 # print(tu1, type(tu1)) # <class 'tuple'> 77 78 79 # tu = ([1]) 80 # tu1 = ([1],) 81 # print(tu, type(tu)) # [1] <class 'list'> 82 # print(tu1, type(tu1)) # ([1],) <class 'tuple'> 83 # 总结: 如果元祖里只有一个元素,只有加上“,逗号” ,它才是元祖,否则,元素是什么类型,就是什么类型 84 85 86 # =========================================== 87 # python中的深浅拷贝 88 89 # python当中对于拷贝,分为两种类型。一种是数字和字符串,另外一种就是字典 列表 元祖等其它类型。 90 91 # 对于数字和字符串的拷贝 92 # 数字和字符串在 赋值 浅拷贝 深拷贝 在内存当中用的都是同一块地址。 93 94 95 # 对于字典 列表 元祖 等其他类型的拷贝 96 97 # 赋值:字典、列表、元祖等其他类型用的内存地址不会变化 都是同一块内存地址。 98 # 浅拷贝:字典、列表、元祖等类型,它们只拷贝第一层地址。 99 # import copy 100 101 # n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]} 102 # n2 = copy.copy(n1) # 浅拷贝 103 # print("第一层字典的内存地址:") 104 # print(id(n1)) 105 # print(id(n2)) 106 # print("第二层嵌套的列表的内存地址:") 107 # print(id(n1["k3"])) 108 # print(id(n2["k3"])) 109 110 # 输出结果: 111 # 第一层字典的内存地址: 112 # 2596105783768 113 # 2596105783840 114 # 第二层嵌套的列表的内存地址: 115 # 2596108135560 116 # 2596108135560 117 118 119 # 深拷贝:字典、列表、元祖等类型,它里面嵌套多少 120 # 层,就会拷贝多少层出来,但是最底层的数字和字符串地址不变。 121 # import copy 122 # 123 # n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 567]} 124 # n3 = copy.deepcopy(n1) # 深拷贝 125 # print("第一层字典的内存地址:") 126 # print(id(n1)) 127 # print(id(n3)) 128 # print("第二层列表的内存地址:") 129 # print(id(n1["k3"])) 130 # print(id(n3["k3"])) 131 132 # 输出结果: 133 # 第一层字典的内存地址: 134 # 2268266269144 135 # 2268295394648 136 # 第二层列表的内存地址: 137 # 2268296866952 138 # 2268296867144 139 140 # 通过例子发现,进行深浅拷贝时,字典里面的第一层和里面嵌套的列表的地址 141 # 都已经改变了。对于深拷贝,它会拷贝多层,将第二层的列表也拷贝一份,如 142 # 果还有第三层嵌套,那么第三层的也会拷贝,但是对于里面的最小元素,比如 143 # 数字和字符串,这里就是"wu", 123, "alex", 567之类的,按照python的机 144 # 制,它们会共同指向同一个内存地址。 145 146 147 # 举个实际应用场景的栗子。 148 149 # 我们在维护服务器信息的时候,经常会要更新服务器信息,这时我们 150 # 重新一个一个添加是比较麻烦的,我们可以把原数据类型拷贝一份, 151 # 在它的基础上做修改。 152 153 154 # 例子一: 155 156 # import copy 157 # 158 # dic = { 159 # "cpu": [70, ], 160 # "mem": [70, ], 161 # "disk": [70, ] 162 # } 163 # # 定义了一个字典,存储服务器信息。 164 # print("before", dic) 165 # new_dic = copy.copy(dic) 166 # new_dic["cpu"][0] = 30 # 更新cpu为 30 167 # print(dic) 168 # print(new_dic) 169 170 # 输出结果为: 171 # before {'cpu': [70], 'mem': [70], 'disk': [70]} 172 # {'cpu': [30], 'mem': [70], 'disk': [70]} 173 # {'cpu': [30], 'mem': [70], 'disk': [70]} 174 175 # 使用浅拷贝时,咱们修改新的字典的值后,旧的字典的值也被修改了, 176 # 这不是我们希望看到的 177 178 179 # 例子二:使用深拷贝 180 # import copy 181 # 182 # dic = { 183 # "cpu": [70, ], 184 # "mem": [70, ], 185 # "dis": [70, ] 186 # } 187 # print("before", dic) 188 # new_dic = copy.deepcopy(dic) 189 # new_dic["cpu"][0] = 60 190 # print(dic) 191 # print(new_dic) 192 193 # 输出结果: 194 # before {'cpu': [70], 'mem': [70], 'dis': [70]} 195 # {'cpu': [70], 'mem': [70], 'dis': [70]} 196 # {'cpu': [60], 'mem': [70], 'dis': [70]} 197 198 # 注:本文是根据老男孩课程内容整理与引自 doublexi 的博客园而成。 199 # 下面特附上他的博客园网址, 200 # 本文仅供个人笔记使用,如果有侵犯,请联系我,我立即撤销。 201 # https://www.cnblogs.com/doublexi/