六、集合

集合(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

代码块

代码是基于代码块运行的

  • 一个文件就是一个代码块
  • 交互式命令一行就是一个代码块

代码缓存机制

目的:提升性能,节省内存空间

机制:创建变量先检查内存中有无此数据,没有就创建,如果有则满足以下条件将复用:

  • 同一代码块:intboolstr(几乎所有)

  • 不同代码块(小数据池):int 中 -5 ~ 256 的数、boolstr(满足一定规则)


深浅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)

posted @ 2020-03-23 22:10  今夜星河漫漫  阅读(195)  评论(0编辑  收藏  举报