show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
- 上次学习了集合
- 集合有两个特点
- 里面不能有重复的元素
- 无序
- 集合可以
- 添加 add
- 清空 clear
- 指定删除 remove
- 丢弃 discard
- 弹出 pop
- 这就是集合元素的操作
- 有点类似于列表list
- 列表如果不能修改就是元组
- 集合如果不能修改是什么呢?🤔
- frozenset
- frozen 来自于 freeze
- 冻住的意思
- set 有来自于什么呢?
- 最早来自于宗教教派
- 类似的一群人
- 坐(sit) 在一起做事情
- 许多具有相似性或天然亲和力的人或事
- 一组一套某种东西
-
冻住的集合
-
构造之后就不能增删改了
- 就像元组一样
- 列表可以改
- 但是元组不行
- 集合可以改
- 但冰封集合不行
- 一动一静
- 一阴一阳之谓道
- 集合可以拷贝吗?
- 直接=赋值
- 就是把地址赋过去
- 实际上还是一个集合
- https://pythontutor.com/visualize.html#mode=display
- 想要在内存要两个集合怎么办?
- 不过这是一个 shallow 拷贝
- 浅拷贝
- 怎么证明copy是浅拷贝呢?
- s1 中有三个元素
- 数字 1
- 数字 2
- 元组(3,4)
- s2 是 s1 的浅拷贝
- s2 有自己独立的地址
- 但是他的元组元素和 s1 的元组
- 指向了相同的地址空间
- 这就是浅拷贝
- 我想要深拷贝
- 怎么办呢?
- 这个东西看起来也差不多
- 也没深到那里去啊
- 为什么深拷贝后 s1 和 s2 中的(3,4)还是指向一个地址空间?
- 为什么会这样呢?
- 我们还是需要从根源考虑
- 元组的深拷贝
- 因为元组的深拷贝就是拷贝本身
- 所以深拷贝和浅拷贝一致
- 确实如此
- 那深拷贝的意义在哪里呢?
- 深拷贝一般对于列表是特别有效的
- 报错了
- 列表不是 hashable 的元素
- 列表不是常量
- 而是变量
- 特征不固定
- 所以不是hashable的元素
- 所以列表不能作为集合项元素
- 如果列表是元组中的一个元组项呢?
- 嵌套在里面的列表还是变量
- 不可被hash算法确定为值
- 那集合可以作为集合元素么?
- 同样的
- 集合也是可变的
- 而不是常量
- 也不是 hashable 的元素
- 也不能作为集合元素
- 所以
- 只有元组
- 这种常量
- 能作为集合的集合项
- frozenset也是常量
- 可以作为集合项吗?
- 貌似可以的
- 这就是集合的细节
- 这次先学习了冰封集合
- 不能修改的集合
- 就是冰封集合
- 正如
- 不能修改的列表就是元组
- 不能修改的对象是常量
- 是hashable的
- 是可以作为集合的集合项的
- 冰封集合也是可以作为集合项的
- 集合有没有运算呢?🤔
- 下次再说 👋