python基础6

id == is

  • id函数是返回值的内存地址
  • == 是判断数据的值是否相同
  • is 是判断数据的内存地址是否相同

什么是代码块

  • 在python中,一个py文件、一个模块、一个类、一个函数就是代码块

两种缓存机制

  • 机制一

    • 在同一代码块内,一些不可变的数据类型的数据,会生成一个以数据值为key,一个存储变量名的set为value,类似字典的数据类型,当一个变量被赋值时,先进行右运算,会在代码块的类字典内找寻相同的值的key,如果有就在value中添加变量名,没有就会在类字典中添加键值对
    • 优点:节省内存,提高效率
    • 不可变的数据类型:int、str、bool、tuple
  • 机制二(小数据池)

    • 在不同的代码块中,一些特定的不可变的数据类型的数据,会提前生成一个类似于机制一中的类字典,不同于同一代码块,它是有范围的数字【-5~256之间的数字】、特殊的字符串、bool组成,因为范围变小,所以称为小数据池

集合 set

  • set特性

    • 元素去重:即储存在set中的元素,不能重复,可以利用该特性给列表去重
    • 储存在set中的元素必须是不可变的,即可哈希的,例如 int、str、tuple、bool
  • 创建set的方法

    • 方法一

      • set函数

        s =  set()
        
    • 方法二

      • s = {value,value1,....}
        
      • {}不是空的集合,是空的字典,空set只能是set()

  • set的增删查(set没有改的操作)

      • 方法一【添加单个值】

        s.add(value) 
        
      • 方法二【添加一个可迭代对象(set、列表、元组、str)】

        s.update() 
        
      • 方法一【按照值删除元素,找不到值会报错】

        set.remove(value)
        
      • 方法二【按照值删除元素,找不到值不报错】

        set.discard(value)
        
      • 方法三【随机删除一个元素,set为空时报错,有返回值,就是被删除的元素】

        set.pop()
        
      • 方法四【清空set】

        set.calear()
        
  • set的交并差、反交差【都有返回值是set类型】

    • 交 【使用特殊字符&,返回两个集合的相同元素】

      s = {123}
      s1 = {2,3,4}
      print(s & s1) # {2,3}
      
    • 并【使用特殊字符|,返回两个集合的和(将两个集合合并成一个集合)】

      s = {123}
      s1 = {2,3,4}
      print(s | s1) # {1,2,3,4}
      
    • 差【使用字符-,A-B集合,将A集合内含有的B几个元素全部去除,再返回A集合】

      s = {123}
      s1 = {2,3,4}
      print(s- s1) # {1}
      
    • 反交集【使用特殊字符^,返回两个集合不同的元素】

      s = {123}
      s1 = {2,3,4}
      print(s^s1) {1,4}
      
  • 字典的超集和子集【返回值是bool】

    • 超集【使用字符>

      • s = {1,2,3,4}
        s1 = {1,2}
        print(s > s1) #True
        
    • 子集【字符 <

      • s = {1,2,3,4}
        s1 = {1,2}
        print(s1 < s) #True
        

深浅copy

  • 浅copy

    • 只是在copy是时生成一个新的外壳,但是里面的元素,如果是集合的数据类型,还是使用原数据集合内引用数据类型的地址

      l = [1,2,3,[1,2,3]]
      l1 = l.copy()
      l1[-1].append(4)
      print(l1)
      # [1,2,3,[1,2,3,4]]
      print(l)
      # [1,2,3,[1,2,3,4]]
      
      • 两者的外壳不同,改变里面的存放的不可变数据时,没有任何问题,但是改变其可变的数据时,会使两个容器都发生改变
  • 深copy

    • 要引入copy模块,使用deepcopy方法

    • import  copy
      l = [1,2,3,[1,2,3]]
      l1 = copy.deepcopy(l)
      
      l1[-1].append(1)
      print(l)
      print(l1)
      
      • 在深copy时,会生成新的外壳,而里面的不可变的元素还是沿用原来的内存地址,而可变的数据,则另外生成新的外壳,而且里面的不可变的元素,还是如同外层一样,使用原来的内存地址,可变的元素,继续生成新的外壳,直到没有。
posted @   MoSter-CXM  阅读(25)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示