• python入门(四)小数据池、深浅拷贝、集合


    小数据池

    1. 小数据池:缓存机制(驻留机制)

      • ==(用于判断两边的内容是否相等)

      • a=10 
        b=10
        print(a==b)# ==用于判断两边的内容是否相等
        
      • is(用于判断两边内存地址是否相等)

      • a=10
        b=10
        print(a is b)
        #输出 True
        
      • #小数据池总结
        
        #1、数字范围:-5~256
        #2、字符串:
        """
        1、同一代码下,内容相同则内存地址相同
        2、乘法相乘总长度不能超过20
        3、惩罚的时候中文、特殊符号乘以0
        """
        #3、布尔型:同一代码下,内容相同则内存地址相同
        
        #代码块:一个文件、一个函数、一个类、一个模块、终端每一行代码都叫做代码块
        #1、数字
        """
        1、同一代码下,内容相同则内存地址相同
        2、数字相乘不能用浮点型
        3、数字的范围:-5~256
        """
        #2、字符串
        """
        1、同一代码下,内容相同则内存地址相同
        2、字符串相乘总长不能超过20
        3、乘法的时候中文、特殊字符相乘以1或0
        """
        #3、布尔型:同一代码下,相同内容则内存地址相同
        

    3.9 深浅拷贝

    1. 赋值

      • a=20#开辟一个内存空间存放20,a指向这个内存地址
        b=a#把a的值赋值给b,这时b指向存放20的内存地址
        print(id(a))
        print(id(b))
        #结果为 1403154048 1403154048
        
      • ![1562835508499](E:python 学习笔记assets1562835508499.png)

    2. 浅拷贝

      • 拷贝了最外围的对象本身,内部的元素都只是拷贝了一个引用而已。也就是,把对象复制一遍,但是该对象中引用其他对象我不复制

      • import copy #导入copy模块
        a=[1,2,3,[4,5,6]]
        b=a.copy
        b[0]=5
        print(a)
        print(b)
        #结果为:[1,2,3,[4,5,6]]
        #[5,2,3,[4,5,6]]
        b[-1][0]=9
        print(a)
        print(b)
        #结果为:[1,2,3,[9,5,6]]
        #[1,2,3,[9,5,6]]
        
    3. 深拷贝

      • 外围和内部元素都进行拷贝对象本身,而不是引用。也就是把对象复制一遍,并且该对象中引用对象也复制

      • import copy
        a=[1,2,3,[4,5,6]]
        b=copy.deepcopy(a)
        a[0]=7
        print(a)
        print(b)
        #结果为:[7,2,3,[4,5,6]]
        #[7,2,3,[4,5,6]]
        a[-1][0]=9
        print(a)
        print(b)
        #结果为:[1,2,3,[9,5,6]]
        #[1,2,3,[9,5,6]]
        
    4. 总结:浅拷贝只是拷贝第一层元素,第一层元素引用的元素不复制只是引用;浅拷贝的时候,只会开辟一个新的容器列表,其他元素使用的都是源列表中的元素;
      深拷贝:拷贝第一层元素和第一层元素引用对象,不可变数据进行公用,可变的数据类型再次开辟空间

    3.10 集合(set)

    1. 什么是集合?

      • 可以理解成没有值的字典,无序,不支持索引

      • 天然去重

      • 定义集合

      • s = {1,"alex",False,(1,2,3),12,1,12,4,6,32,2,4}
        print(s)
        #结果为{False, 1, 32, 2, 4, 6, 12, (1, 2, 3), 'alex'}
        
    2. 集合的增、删、改、查

      • s={1,2,3,4}
        s.add("67")#只能添加一个
        print(s)
        #结果为{1,2,3,4,"67"}
        
        
      • s={1,2,3,4}
        s.update("今天")#迭代添加
        print(s)
        #结果为:{1,2,3,4,"今","天"}
        
      • s={1,2,3,4}
        print(s.pop())# pop有返回值 4
        print(s)#{1,2,3}
        
      • s={1,2,3,4}
        s.remove(1)#指定元素删除
        print(s)#{2,3,4}
        
      • s={1,2,3,4}
        s.clear()#清空 {}
        
      • 改:先删后改

      • s={1,2,3,4}
        for x in s
        	print(x)
        
    3. 其他操作:

      # s1 = {1,2,3,4,5,6,7}
      # s2 = {5,6,7,1}
      # print(s1 & s2)  # 交集
      # print(s1 | s2)  # 并集
      # print(s1 - s2)  # 差集
      # print(s1 ^ s2)  # 反交集
      # print(s1 > s2)  # 父集(超集)
      # print(s1 < s2)  # 子集
      
      # print(frozenset(s1))  # 冻结集合 更不常用
      # dic = {frozenset(s1):1}
      # print(dic)
      
  • 相关阅读:
    Educational Codeforces Round 66 (Rated for Div. 2)
    数学模板整理
    多项式全家桶
    [Scoi2016]背单词(trie+贪心)
    Codeforces Round #563 (Div. 2) 划水记
    应届生秋招可能会遇到的三个问题
    基于vue(element ui) + ssm + shiro 的权限框架
    ASP.NET 分页+组合查询 练习
    登录,注册页面练习
    HTML css 样式表
  • 原文地址:https://www.cnblogs.com/zhangdadayou/p/11171858.html
Copyright © 2020-2023  润新知