Skip to content

Latest commit

 

History

History
203 lines (137 loc) · 4.49 KB

106-791000-[专业选修]集合_冰封集合_拷贝_浅拷贝_深拷贝.sy.md

File metadata and controls

203 lines (137 loc) · 4.49 KB
show version enable_checker
step
1.0
true

集合 -集合概念

回忆

  • 上次学习了集合
  • 集合有两个特点
    • 里面不能有重复的元素
    • 无序
  • 集合可以
    • 添加 add
    • 清空 clear
    • 指定删除 remove
    • 丢弃 discard
    • 弹出 pop
  • 这就是集合元素的操作
  • 有点类似于列表list
    • 列表如果不能修改就是元组
    • 集合如果不能修改是什么呢?🤔

冰封集合

  • frozenset

图片描述

  • frozen 来自于 freeze
    • 冻住的意思

图片描述

  • set 有来自于什么呢?

set

  • 最早来自于宗教教派
    • 类似的一群人
    • 坐(sit) 在一起做事情

图片描述

  • 许多具有相似性或天然亲和力的人或事
  • 一组一套某种东西

frozenset

  • 冻住的集合

  • 构造之后就不能增删改了

    • 就像元组一样

图片描述

  • 列表可以改
    • 但是元组不行
  • 集合可以改
    • 但冰封集合不行
  • 一动一静
    • 一阴一阳之谓道
  • 集合可以拷贝吗?

直接赋值

图片描述

  • 想要在内存要两个集合怎么办?

copy

图片描述

  • 不过这是一个 shallow 拷贝
  • 浅拷贝

图片描述

  • 怎么证明copy是浅拷贝呢?

构造

  • s1 中有三个元素
    • 数字 1
    • 数字 2
    • 元组(3,4)

图片描述

  • s2 是 s1 的浅拷贝
    • s2 有自己独立的地址
    • 但是他的元组元素和 s1 的元组
      • 指向了相同的地址空间
  • 这就是浅拷贝
    • 我想要深拷贝
  • 怎么办呢?

深拷贝

图片描述

  • 这个东西看起来也差不多
  • 也没深到那里去啊
  • 为什么深拷贝后 s1 和 s2 中的(3,4)还是指向一个地址空间?
  • 为什么会这样呢?

元组的深拷贝

  • 我们还是需要从根源考虑
    • 元组的深拷贝

图片描述

  • 因为元组的深拷贝就是拷贝本身
  • 所以深拷贝和浅拷贝一致

图片描述

  • 确实如此
  • 那深拷贝的意义在哪里呢?

深拷贝

图片描述

  • 深拷贝一般对于列表是特别有效的

集合元素

  • 报错了

图片描述

  • 列表不是 hashable 的元素
    • 列表不是常量
    • 而是变量
    • 特征不固定
    • 所以不是hashable的元素
  • 所以列表不能作为集合项元素
  • 如果列表是元组中的一个元组项呢?

元组项

  • 嵌套在里面的列表还是变量
    • 不可被hash算法确定为值

图片描述

  • 那集合可以作为集合元素么?

集合里的集合

  • 同样的
    • 集合也是可变的
    • 而不是常量
    • 也不是 hashable 的元素

图片描述

  • 也不能作为集合元素
  • 所以
    • 只有元组
    • 这种常量
    • 能作为集合的集合项

图片描述

  • frozenset也是常量
  • 可以作为集合项吗?

frozenset

  • 貌似可以的

图片描述

  • 这就是集合的细节

总结

  • 这次先学习了冰封集合
  • 不能修改的集合
    • 就是冰封集合

图片描述

  • 正如
    • 不能修改的列表就是元组
    • 不能修改的对象是常量
    • 是hashable的
    • 是可以作为集合的集合项的
    • 冰封集合也是可以作为集合项的
  • 集合有没有运算呢?🤔
  • 下次再说 👋