小数据池 集合 深浅拷贝

小数据池 集合 深浅拷贝

一、小数据池

  • 定义:小数据池是Python中一种提高效率的方式,固定数据类型使用同一个内存地址,支持数据类型:str,int,bool是一种缓存机制,特被称为驻留机制,各大编程语言中都有类似的东西。

  • id() ----- 查看元素的内存地址
  • is 与 == 的区别
    • is 判断两个元素的内存地址是否相等
    • == 判断等号左右两边的元素的值是否相等
  • 小数据池的规则
    • 数字:-5~256
    • 字符串:
      • 字符串在做乘法(乘数不为1)的时候总长度不能超过20
      • 自己定义的字符串的长度不受限制,但字符串必须由字母、数字、下划线组成。
      • 特殊字符(中文除外)定义1个的时候,进行驻留
  • 代码块:一个文件,一个模块,一个函数,一个类,终端中每一行都是一个代码块
    • 规则
      • 数字:全部驻留
      • 字符串:
        1. 自己定义的字符串全部驻留
        2. 字符串做乘法(乘数不为1)时总长度不超过20
        3. Python3.7以上版本乘法的时候总长度不能超过4096

二、set集合

  • 定义:集合就是一个没有value的字典,无序,去重,可哈希,集合是一个可变数据类型

  • 语法:

  • 集合的相关操作

    s = {1,2,3,4,5}

    • s.update(可迭代数据类型)   ---  迭代添加
      s.add('haven')      -----   单个添加
      
    • # s.pop()       ---- 随机删除
      # s.remove(3)   ---- 指定元素删除
      # s.clear()     ---- 清空(注:结果为set(),为了与字典区分
      # del s         ---- 删除整个集合
      
    • 只能删了再加

    • for循环遍历

    • 其他操作
      s1 = {1,2,3,4}
      s2 = {3,4,5,6}
      print(s1-s2)  --- 差集 1,2
      print(s1|s2)  --- 并集 1,2,3,4,5,6
      print(s1&s2)  --- 交集 3,4
      print(s1^s2)  --- 反交集 1,2,5,6
      print(s1>s2)  --- 判断s1是否为s2的父集  返回布尔值
      print(s1<s2)  --- 判断s1是否为s2的子集  返回布尔值
      s3 = frozenset({1,2,3,4,5,6}) --- 冻结集合,变成不可变数据类型
      
    • 重要用法---集合去重
      lis = [1,2,2,3,2,4,5,6,5,6,7]
      print(list(set(lis)))  --- 结果[1, 2, 3, 4, 5, 6, 7]  去重是数组最重要的用法
      

三、深浅拷贝

  • 赋值 =

    赋值没有创建新的空间,是多个变量指向同一个内存地址

  • 浅拷贝
    • l2 = l1[:] 和 l2 = l1.copy()
    • 只拷贝第一层元素
    • 会创建一个新的容器,容器中的元素和原来容器中的元素指向同一个内存地址
  • 深拷贝
    • import copy

      l2 = copy.deepcopy(l1)

    • 不可变的数据类型和原数据指向同一空间

    • 可变数据类型会创建一个新的空间

  • 总结:
    • 浅拷贝只为最外层可变数据类型创建新的空间
    • 深拷贝会为每一层可变数据类型创建新的空间
posted @ 2019-11-21 12:01  豆子V  阅读(148)  评论(0编辑  收藏  举报