python基础—基本数据类型二(set 集合,深浅拷贝)

1、基础数据类型汇总补充

str

int

list

bool

dict

tuple

2、集合 set {}

可变的数据类型,(不可哈希)里面的元素必须是不可变的数据类型,无序,不重复

以下是集合最重要的两点:

  去重,把一个列表变成集合,就自动去重了。

  关系测试,测试两组数据之前的交集、差集、并集等关系。

2.1 集合的创建

1 set1 = set ({1,2,'job'})
2 set2 = {1,2,'job'}
3 
4 print(set1,set2)

2.2 集合的增加

1 #add
2 set1 = {'杨过','周伯通','小龙女','黄蓉','郭靖'}
3 set1.add('李莫愁')
4 print(set1)
5 
6 #update  迭代增加
7 set1.update('孙不二')
8 print(set1)

2.3 集合的删

 1 #remove 删除一个元素
 2 set1.remove('杨过')
 3 print(set1)
 4 
 5 #pop 随机删除
 6 set1.pop()
 7 print(set1)
 8 
 9 #clrar 清空
10 set1.clear()
11 print(set1)
12 
13 #del
14 del set1
15 print(set1)

2.4 集合其它操作

交集(&  或者 intersection)

1 set1 = {'杨过','周伯通','小龙女','黄蓉','郭靖'}
2 set2 = {'王重阳','林朝英','小龙女'}
3 print(set1&set2)
4 print(set1.intersection(set2))

并集(| 或者 union)

1 set1 = {'杨过','周伯通','小龙女','黄蓉','郭靖'}
2 set2 = {'王重阳','林朝英','小龙女'}
3 print(set1|set2)
4 print(set1.union(set2))

差集(- 或者 difference)

1 set1 = {'杨过','周伯通','小龙女','黄蓉','郭靖'}
2 set2 = {'王重阳','林朝英','小龙女'}
3 print(set1-set2)
4 print(set1.difference(set2)) #{'黄蓉', '郭靖', '周伯通', '杨过'}

反交集 (^ 或者 symmetric_difference)

1 set1 = {'杨过','周伯通','小龙女','黄蓉','郭靖'}
2 set2 = {'王重阳','林朝英','小龙女'}
3 print(set1^set2)
4 print(set1.symmetric_difference(set2))

子集与超集

1 set1 = {1,2,3}
2 set2 = {1,2,3,4,5,6}
3 
4 print(set1 < set2)
5 print(set1.issubset(set2))  # 这两个相同,都是说明set1是set2子集。
6 
7 print(set2 > set1)
8 print(set2.issuperset(set1))  # 这两个相同,都是说明set2是set1超集。

frozenset不可变集合,让集合变成不可变类型。

s=frozenset('job')
print(s,type(s))

3、深浅copy

赋值运算,l1与l2指向的是同一个内存地址,所以他们是完全一样的。

1 l1 = [1,2,3,['john','job']]
2 l2 = l1
3 
4 l1[0] = 111
5 print(l1)
6 print(l2)

浅拷贝copy 第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。

 1 l1 = [1,2,3,['john','job']]
 2 l2 = l1.copy()
 3 print(l1,id(l1))
 4 print(l2,id(l2))
 5 
 6 l1[1] = 222
 7 print(l1,id(l1))
 8 print(l2,id(l2))
 9 
10 l1[3][0]='华仔'
11 print(l1,id(l1[3]))
12 print(l1,id(l2[3]))

深拷贝 deepcopy  两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。

 1 import copy
 2 l1 = [1,2,3,['barry','alex']]
 3 l2 = copy.deepcopy(l1)
 4 
 5 print(l1,id(l1))  # [1, 2, 3, ['barry', 'alex']] 2915377167816
 6 print(l2,id(l2))  # [1, 2, 3, ['barry', 'alex']] 2915377167048
 7 
 8 l1[1] = 222
 9 print(l1,id(l1))  # [1, 222, 3, ['barry', 'alex']] 2915377167816
10 print(l2,id(l2))  # [1, 2, 3, ['barry', 'alex']] 2915377167048
11 
12 l1[3][0] = 'wusir'
13 print(l1,id(l1[3]))  # [1, 222, 3, ['wusir', 'alex']] 2915377167240
14 print(l2,id(l2[3]))  # [1, 2, 3, ['barry', 'alex']] 2915377167304

猜你喜欢

转载自www.cnblogs.com/maystar/p/9826393.html