【深浅拷贝】【集合】

【深浅拷贝】

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

 

posted @ 2021-01-23 22:39  wchw  阅读(87)  评论(0)    收藏  举报