六、集合
集合(set)
特性
-
集合是无序的序列
-
本身是可变的数据类型
-
集合的元素必须唯一,元素包括元素内部也必须为不可变数据类型
作用
- 删除重复数据:转集合自动去重
- 关系测试:交集、并集、差集、...
创建
s1 = set({1, 2, 3}) # {1, 2, 3}
s2 = {1, 2, 3} # {1, 2, 3}
s3 = set() # 设置空集合
增删改查
增
增加:set.add(元素)
迭代增加:set.updata(元素)
删
指定元素删除:set.remove(元素)
(元素不存在报错)
指定元素删除:set.discard(元素)
(元素不存在不报错)
随机删除:set.pop(元素)
清空:set.clear(元素)
改:先删除再增加
查:for循环
关系测试
s1 = {1, 2, 3}
s2 = {2, 3}
交集:取两者重复的元素 (s1 & s2)
# {2,3}
并集:交集加两者独有的元素 (s1 | s2)
# {1,2,3}
差集:减去交集,剩自己独有的元素 (s1 - s2)
# {1}
反交集:去掉交集,剩两者独有的元素 (s1 ^ s2)
# {1}
超集与子集:判断是否完全包含或属于另一个集合 (s1 > s2)
# T
id is
- id:数据在内存中的地址号,内存地址号都是随机的
获取对象的内存地址:id(对象)
- is:判断内存地址是否相同
两个相同的值,不可变数据类型内存地址相同,可变数据类型内存地址不同
s1 = 'hi'
s2 = 'hi'
print(s1 is s2) # T
l1 = [1, 2, 3]
l2 = [1, 2, 3]
print(l1 is l2) # F
代码块
代码是基于代码块运行的
- 一个文件就是一个代码块
- 交互式命令一行就是一个代码块
代码缓存机制
目的:提升性能,节省内存空间
机制:创建变量先检查内存中有无此数据,没有就创建,如果有则满足以下条件将复用:
-
同一代码块:
int
、bool
、str(几乎所有)
-
不同代码块(小数据池):
int
中 -5 ~ 256 的数、bool
、str
(满足一定规则)
深浅Copy
例:l1 = [1, 2, 3, [22, 33]]
- 浅Copy:在内存中创建相同值对象为新id,其中元素id全部复用(可变元素内部改变id不变)
l2 = l1.copy() # 方法一
import copy # 方法二
l3 = copy.copy(l1)
- 深Copy:在内存中创建相同值对象为新id,其中不可变的元素id复用,可变的元素创建新id
import copy # 引用模块
l2 = copy.deepcopy(l1)
© 版权声明
文章版权归作者所有,未经允许请勿转载。
文章版权归作者所有,未经允许请勿转载。
THE END