标签:内存 size add class bar 重要 upd 并集 font
一、集合
集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但集合本身是不可哈希的(所以集合做不了字典的键)
集合最重要的两点:
1.去重,把一个列表变成集合,就自动去重了
2.关系测试,测试两组数据之前的交集、并集、差集等关系
1、集合的创建
set1 = set({1,2,‘barry‘}) set2 = {1,2,‘barry‘} print(set1,set2)
2、集合的增
set1 = {‘alex‘, ‘wusir‘, ‘ritian‘,‘barry‘} set1.add(‘景女神‘) #增加一个元素 print(set1) update:迭代的增加 set1.update(‘A‘) print(set1) set1.update(‘老师‘) print(set1) set1.update([1,2,3]) print(set1)
3、集合的删
set1 = {‘alex‘,‘wusir‘,‘ritian‘,‘egon‘,‘barry‘} set1.remove(‘alex‘) #删除一个元素 print(set1) set1.pop() #随机删除一个元素 print(set1) set1.clear() #清空集合 print(set1) del set1 #删除集合 print(set1)
4、集合的其他操作
4.1交集(&或者intersectiion)
set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 & set2) print(set1.intersection(set2))
4.2并集(| 或者union)
set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 | set2) print(set1.union(set2))
4.3差集(-或者difference)
set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1- set2) print(set1.difference(set2))
4.4反交集(^或者symmetric_difference)
set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 ^ set2) print(set1.symmetric_difference(set2))
4.5子集与超集
set1 = {1,2,3} set2 = {1,2,3,4,5,6} print(set1<set2) print(set1.issubset(set2)) #这两个相同说明set1是set2的子集 print(set2>set1) print(set2.issuperset(set1))#这两个相同说明set2是set1的超集
5、frozenset不可变集合,让集合变成不可变类型
s = frozenset(‘barry‘) print(s,type(s)) #frozenset({‘r‘, ‘a‘, ‘b‘, ‘y‘}) <class ‘frozenset‘>
集合的查询只能用循环操作
二、深浅copy
1、浅copy
l1 = [1, 2, 3, [‘barry‘, ‘alex‘]] l2 = l1.copy() print(l1,id(l1)) #[1, 2, 3, [‘barry‘, ‘alex‘]] 2628597576008
print(l2,id(l2)) #[1, 2, 3, [‘barry‘, ‘alex‘]] 2628597576136
l1[1] = 222 print(l1,id(l1)) #[1, 222, 3, [‘barry‘, ‘alex‘]] 2628597576008 print(l2,id(l2)) #[1, 2, 3, [‘barry‘, ‘alex‘]] 2628597576136 l1[3][0] = ‘wusir‘ print(l1,id(11)) #[1, 222, 3, [‘wusir‘, ‘alex‘]] 1981768224 print(l2,id(l2)) #[1, 2, 3, [‘wusir‘, ‘alex‘]] 2628597576136
对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性
2、深deepcopy
import copy l1 = [1, 2, 3,[‘barry‘, ‘alex‘]] l2 = copy.deepcopy(l1) print(l1,id(11)) # [1, 2, 3, [‘barry‘, ‘alex‘]] 1981768224 print(l2,id(l2)) #[1, 2, 3, [‘barry‘, ‘alex‘]] 1874792784136 l1[1] = 222 print(l1,id(l1)) #[1, 222, 3, [‘barry‘, ‘alex‘]] 1874792680392 print(l2,id(l2)) #[1, 2, 3, [‘barry‘, ‘alex‘]] 1874792784136 l1[3][0] = ‘wusir‘ print(l1,id(l1)) #[1, 222, 3, [‘wusir‘, ‘alex‘]] 1874792680392 print(l2,id(l2)) #[1, 2, 3, [‘barry‘, ‘alex‘]] 1874792784136
对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变
标签:内存 size add class bar 重要 upd 并集 font
原文地址:http://www.cnblogs.com/gumo/p/7744876.html