集合,深浅拷贝

1. 集合(set):就是把一些不同的元素聚集在一起形成集合,在Python中也是数据类型的一种

 不可变数据类型:数字,字符串,元组         可变类型:列表,字典

作用:去重,去除列表中重复的

      进行关系测试

1.1  创建集合

1 s1=set("sang")        可变集合  可添加和删除元素,不能用作字典的键
dic = {s1:"123"} unhashable type: 'set'
2 s2= frozenset('alex') 不可变集合 3 print(s2,type(s2))
结果为:
{'s', 'a', 'g', 'n'} <class 'set'>
frozenset({'a', 'l', 'x', 'e'}) <class 'frozenset'>
1 a = set([ 1,2,3,4,5 ])
2 b = set([ 4,5,6,7,8 ])
3 c = set([2,2,3,5])
4 print(a)
5 print(b)
6 print(type(a))
7 print(type(b))
8 print(c)
结果为:

  {1, 2, 3, 4, 5}
  {8, 4, 5, 6, 7}
  <class 'set'>
  <class 'set'>

  {2,3,5}

如上所示最后结果显示的就是 set的类型,还有通过上面 (c)就可以发现集合的元素是不重复的即它可以自动去重,还有集合是无序的(b)

1 li=[[1,2],'a','b']
2 s =set(li) #TypeError: unhashable type: 'list'
3 print(s)
集合对象是一组无序排列的可哈希的值其成员可以用来作字典的键

1.2 访问集合

1 s = set("sang")
2 print("a" in s)      
3 #s[1]                    # 'set' object does not support indexing
4 for i in s:
5 print(i)
结果:
1 1 True
2 2 n
3 3 s
4 4 a
5 5 g

1.3  集合的操作

增加add

1 s = set("sang")
2 s.add(2)
3 s.add("alex")
4 print(s)

结果:

1 {'s', 2, 'g', 'a', 'n', 'alex'}

update  添加多个元素

1 s.update("SANG")
2 print(s)

结果:

1 {2, 'a', 'g', 'n', 'A', 'G', 'alex', 's', 'S', 'N'}

remove 移除

1 s.remove("S")
2 print(s)

结果:

1 {2, 'alex', 'g', 'A', 'a', 'N', 'n', 's', 'G'}

1.4集合的操作符运算

intersection()交集    #union 并集 a = t |s   t和s的并集       difference  差集    #父集  超集
 1 a = set([ 1,2,3,4,5 ])
 2 b = set([ 4,5,6,7,8 ])
 3 #intersection()   交集
 4 print(a.intersection(b))
 5 print(a & b)
 6 
 7 #union 并集 a = t |s   t和s的并集
 8 print(a.union(b))
 9 print(a| b)
10 
11 #差集
12 print(a.difference(b))#  a-b   in a not in b
13 print(b.difference(a)) # b-a  in b not in  a
14 print(a-b)
15 print(b-a)
16 print(a.symmetric_difference(b))  #  symmetric对称,差集 ,反向交集
17 print(a ^ b)
18 
19  #父集  超集
20 print(a.(b))     #a>b
21 print(a.issubset(b))      #子集issuperseta<b
结果:
 1 F:Python安装python.exe "G:/Pycharm文件/week4/day13   9.5/集合.py"
 2 {4, 5}
 3 {4, 5}
 4 {1, 2, 3, 4, 5, 6, 7, 8}
 5 {1, 2, 3, 4, 5, 6, 7, 8}
 6 {1, 2, 3}
 7 {8, 6, 7}
 8 {1, 2, 3}
 9 {8, 6, 7}
10 {1, 2, 3, 6, 7, 8}
11 {1, 2, 3, 6, 7, 8}
12 False
13 False
14 
15 Process finished with exit code 0

2.深浅拷贝

有时候我们也许会需要 对一个列表进行复制,但是如果和很多次呢,我们就需要去开辟很大的空间,显然是不行的所以呢我们这里就用到了copy的用法也就是拷贝,

不可变数据类型:数字,字符串,元组         可变类型:列表,字典

话不多说我就举一个例子大家看一下 结果又什么不同

 1 import copy
 2 husband = ["xiaohu",123,[15000,9000]]
 3 wife = husband.copy()
 4 wife[0] = "xiaopang"
 5 wife[1] = 456
 6 wife[2][1]-=500            #
 7 print(wife)
 8 print(husband)
 9 
10 xiaosan = copy.deepcopy(husband)
11 xiaosan[0] = "jinxin"
12 xiaosan[1] = "789"
13 xiaosan[2][1] -=1800
14 print(xiaosan)                             #
15 print(husband)
结果为:
1 F:Python安装python.exe "G:/Pycharm文件/week4/day13   9.5/深浅拷贝.py"
2 ['xiaopang', 456, [15000, 8500]]
3 ['xiaohu', 123, [15000, 8500]]
4 ['jinxin', '789', [15000, 6700]]
5 ['xiaohu', 123, [15000, 8500]]
6 
7 Process finished with exit code 0

原文地址:https://www.cnblogs.com/mars527/p/5844815.html