【深浅拷贝】【集合】
【深浅拷贝】
1、浅copy:copy当前所有内容重新开辟一个新的内存空间存放;数据内容第一层独立,二层及以后共享
2、深copy:递归查找复制的对象,找到相关内存单元,copy相关内容重新开辟内存空间存放;数据完全独立
1 import copy 2 a = [1,2,[3,4]] 3 b = copy.copy(a) 4 print(id(a), id(b)) # 1926655167432 1926655199560 5 print(id(a[2]), id(b[2])) # 1926655167176 1926655167176 6 a[1] = 0 7 print(a, b) # [1, 0, [3, 4]] [1, 2, [3, 4]] 8 a[2][1] = 5 9 print(a, b) # [1, 0, [3, 5]] [1, 2, [3, 5]]
1 import copy 2 a = [1,2,[3,4]] 3 b = copy.deepcopy(a) 4 print(id(a), id(b)) # 2085647257800 2085647259016 5 print(id(a[2]), id(b[2])) # 2085646584392 2085647257992 6 a[1] = 0 7 print(a, b) # [1, 0, [3, 4]] [1, 2, [3, 4]] 8 a[2][1] = 5 9 print(a, b) # [1, 0, [3, 5]] [1, 2, [3, 4]]
【集合(set)】
set特性 :
无序,不可重复,元素不可变(可哈希)
1 s = set("wchw") # 集合创建 2 print(type(s)) 3 print(s) # 集合元素会自动去重 4 a = [1,2,3,4,3,2,1] 5 sa = set(a) # 自动对列表元素去重 6 print(type(sa), sa) 7 # <class 'set'> 8 # {'w', 'h', 'c'} 9 # <class 'set'> {1, 2, 3, 4}
set分类:
可变集合,不可变集合
1 sa = set("wchw") # 创建可变集合sa 2 sb = frozenset("wchw") #创建不可变集合sb 3 print(type(sa), sa, type(sb), sb) 4 sa.add("hello") # 可变集合添加单个元素 5 # sb.add("hello") # 不可变集合不可添加元素 6 # AttributeError: 'frozenset' object has no attribute 'add' 7 sa.update("world") # 可变集合添加多个元素 or sa.update([12, "ab"]) 8 # sb.update("world") # 不可变集合添加多个元素 9 # AttributeError: 'frozenset' object has no attribute 'update' 10 print(sa, sb) 11 # {'w', 'hello', 'l', 'c', 'r', 'h', 'd', 'o'} frozenset({'w', 'c', 'h'}) 12 sa.remove("hello") # 可变集合删除元素 13 # sb.remove("w") # 不可变集合不可删除元素 14 # AttributeError: 'frozenset' object has no attribute 'remove' 15 del sa # 删除集合sa 16 del sb # 删除集合sb 17 print(sa ,sb) 18 # NameError: name 'sa' is not defined
小结:
s.add('wchw') 添加一个元素uuu s.update('wchw') 添加三个元素 c h w s.update([12, "ab"]) 添加2个元素12,ab s.remove("w") 删除元素w s.pop() 随机删除 s.clear() 清空,清空值,空集合 del sa 删除
1 sa = set("wchw") 2 sb = set("what") 3 print(sa & sb) 4 print(sa.intersection(sb)) 5 # 交集 {'h', 'w'} 6 print(sa | sb) 7 print(sa.union(sb)) 8 # 并集、合集{'t', 'c', 'h', 'a', 'w'} 9 print(sa ^ sb) 10 print(sa.symmetric_difference(sb)) 11 # 对称差集,彼此互相没有的(反向交集,除交叉部分){'c', 't', 'a'} 12 print(sa - sb) 13 print(sa.difference(sb)) 14 # 差集,sa有的{'c'} 15 print(sa > sb) 16 print(sa.issuperset(sb)) 17 # False 18 print("c" in sa) 19 print("c" not in sb) 20 print(sa == sb) 21 print(sa != sb)
1 sa = set("abc") 2 sb = set("abcd") 3 print(sa > sb) 4 print(sa < sb) 5 print(sa == sb) 6 sa = set("abcabc") 7 sb = set("abc") 8 sc = set("abc") 9 print(sa == sb) 10 print(sb < sc) # 特属于数学定义 11 # False 12 # True 13 # False 14 # True 15 # False

浙公网安备 33010602011771号