一.set集合
set集合的元素是不重复的,无序的,元素必须是可哈希的(int,str,tuple,bool).也是用{}表示
set = {"4",4,[1,2,3]} #会报错 set = {"2","dsjoijfj",897,{"回话":"看看"}} #会报错 set = {1,6,"回话",6,8,6,"呵呵"} #set集合可以去重复 print(set) 结果: {1, '回话', 6, 8, '呵呵'}
去重复
可以把列表转换成集合进行去重复, lst = [1,5,6,8,7,2,5,6,9,8,4,5,2] s = set(lst) #列表转换成集合 print(s) lst = list(s) #集合转换成列表 print(lst) 结果: {1, 2, 4, 5, 6, 7, 8, 9} [1, 2, 4, 5, 6, 7, 8, 9]
集合本身是可变的数据类型,不可哈希,有增删改查操作,我们可以用 frozenset(冻结型)来保存数据.
二.深浅拷贝
1.浅拷贝
lst = ["风","雨","雷","电"] lst1 = lst #==赋值操作没有创建对象,所以只有一个列表,内存地址一样. lst.append("空") print(lst) print(lst1) 结果: ['风', '雨', '雷', '电', '空'] ['风', '雨', '雷', '电', '空']
浅拷贝,只拷贝第一层内容,方法: [:] copy()
lst = ["风","雨","雷","电"] lst1 = lst.copy() lst.append("回话") print(lst) print(lst1) print(id(lst)) print(id(lst1)) 答案: ['风', '雨', '雷', '电', '回话'] ['风', '雨', '雷', '电'] 42333256 42333960
#两个lst完全不一样,内存地址和内容页不一样
lst = ["风","雨","雷","电",["天","地","人"]] lst1 = lst.copy() lst[4].append("才") print(lst) print(lst1) print(id(lst[4])) #lst和lst1中的第四个元素比较,内存一样 print(id(lst1[4])) 答案: ['风', '雨', '雷', '电', ['天', '地', '人', '才']] ['风', '雨', '雷', '电', ['天', '地', '人', '才']]
38728776
38728776
#浅拷贝,只会拷贝第一层,第二层内容不会拷贝.
2.深拷贝:把拷贝对象内部的内容全部拷贝一份,引入copy模块, deepcopy().
import copy #插入copy模块 lst = ["风","雨","雷","电",["天","地","人"]] lst1 = copy.deepcopy(lst) lst[4].append("才") print(lst) print(lst1) print(id(lst[4])) print(id(lst1[4])) 结果: ['风', '雨', '雷', '电', ['天', '地', '人', '才']] ['风', '雨', '雷', '电', ['天', '地', '人']]
42532680
42575112
都不一样了,深度拷贝,把元素内部的元素进行拷贝复制,不会产生一个改变另一个也改变的问题.