• 小数据池 深浅拷贝 集合


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

    == 判断两边内容是否相等

    a = 10
    b = 10
    print(a == b)
    

    is 是

    a = 10
    b = 10
    print(a is b)  is判断基于内存地址进行判断
    

    代码块:

    一个文件,一个函数,一个类,一个模块,终端中每一个行是一个代码块

    数字:

    在同一代码块下 只要内容相同就采用相同的内存地址(-5以后就不是)

    数字在做乘法的时候范围 -5 ~ 256

    数字在做乘法的时候不能使用浮点数

    字符串:

    在同一代码块下 只要内容相同就采用相同的内存地址

    乘法的时候总长度不能超过20

    乘法的时候中文,特殊符号乘以1或0

    布尔值:

    在同一代码块下 只要内容相同就采用相同的内存地址

    小数据池:

    数字:

    -5 ~ 256

    字符串:

    在同一代码块下 只要内容相同就采用相同的内存地址

    乘法的时候总长度不能超过20

    乘法的时候中文,特殊符号乘以0

    布尔值:

    在同一代码块下 只要内容相同就采用相同的内存地址

    小数据池的验证方法,必须脱离代码块才能进行验证

    先执行代码块的规则,在执行小数据的规则 --(驻留机制)

    必会:

    == 判断等号两边的值是否相等

    is 判断两边的内存地址是否相等

    2.深浅拷贝 (复制)

    面试必问 : 赋值,浅拷贝,深拷贝

    赋值

    lst = [1,2,3,[5,6,7]]
    lst1 = lst
    print(lst1)                 #[1, 2, 3, [5, 6, 7]]
    print(lst)                  #[1, 2, 3, [5, 6, 7]]
    
    lst[-1].append(8)
    print(lst1)                 #[1, 2, 3, [5, 6, 7, 8]]
    print(lst)                  #[1, 2, 3, [5, 6, 7, 8]]
    
    

    浅拷贝

    lst = [1,2,3,[5,6,7]]
    lst1 = lst.copy()          # 新开辟一个空间给lst1
    
    print(lst[-1])             # [5, 6, 7]
    print(lst1[-1])            # [5, 6, 7]
    
    浅拷贝的时候,只会开辟一个新的容器列表,其他元素使用的都是源列表中的元素
    
    lst = [1,2,3,[5,6,7]]
    lst1 = lst.copy()
    lst1[-1].append(8)
    print(lst)                #[1, 2, 3, [5, 6, 7, 8]]
    print(lst1)               #[1, 2, 3, [5, 6, 7, 8]]
    
    lst = [1,2,3,[5,6,7]]
    lst1 = lst.copy()
    lst[3] = 567
    print(lst1)               #[1, 2, 3, [5, 6, 7]]
    print(lst)                #[1, 2, 3, 567]
    
    lst = [1,2,3,4,[5,6,7,[8,9]]]
    lst1 = lst.copy() 
    lst1.append(10)
    print(lst)                #[1,2,3,4,[5,6,7,[8, 9]]]
    print(lst1)               #[1,2,3,4,[5,6,7,[8,9]],10]
    
    lst = [1,2,3,4,[5,6,7,[8,9]]]
    lst1 = lst.copy()
    lst1[-1][-1] = "56"
    print(lst)                #[1,2,3,4,[5,6,7,'56']]
    print(lst1)               #[1,2,3,4,[5,6,7,'56']]
    
    lst = [[1,2,],90,6,7,[5,6]]
    lst1 = lst.copy()
    lst1[-1] = 8
    print(lst)                #[[1, 2], 90, 6, 7, [5, 6]]
    print(lst1)               #[[1, 2], 90, 6, 7, 8]
    
    dic = {"alex":[1,2,3,[5,6]]}
    dic1 = dic.copy()
    dic["alex"][0] = "56"
    print(dic)                #{'alex': ['56', 2, 3, [5, 6]]}
    print(dic1)               #{'alex': ['56', 2, 3, [5, 6]]}
    
    

    深拷贝

    import copy                # 导入
    lst = [1,2,3,[5,6,7]]
    lst1 = copy.deepcopy(lst)  # 深拷贝
    lst[-1].append(8)
    print(lst)                 # [1, 2, 3, [5, 6, 7, 8]]
    print(lst1)                # [1, 2, 3, [5, 6, 7]]
    
    lst = [1,2,3,[5,6,7,[8,10,9]]]
    import copy
    lst1 = copy.deepcopy(lst)
    lst[-1][-1][1] = 5
    print(lst)            # [1, 2, 3, [5, 6, 7, [8, 5, 9]]]          
    print(lst1)           # [1, 2, 3, [5, 6, 7, [8, 10, 9]]]
    

    总结:

    浅拷贝的时候只拷贝第一层元素

    浅拷贝在修改第一层元素(不可变数据类型)的时候,拷贝出来的新列表不进行改变

    浅拷贝在替换第一层元素(可变数据类型)的时候,拷贝出来的新列表不进行改变

    浅拷贝在修改第一层元素中的元素(第二层)的时候,拷贝出来的新列表进行改变

    深拷贝开辟一个容器空间(列表),不可变数据共用,可变数据数据类型(再次开辟一个新的空间),空间里的值是不可变的数据进行共用的,可变的数据类型再次开辟空间

    3.集合 -- set

    定义集合:

    没有值的字典

    无序 -- 不支持索引

    天然去重

    s = {1,"alex",False,(1,2,3),12,1,12,4,6,32,2,4}
    print(s)
    

    面试题:

    lst = [1,2,1,2,4,2,45,3,2,45,2345,]
    print(list(set(lst)))
    s = {1,2,3,4}
    

    集合的增删改查:

    1.增:

    增:
    s.add("67")        # 只能添加一个
    print(s)
    s.update("今天")    # 迭代添加
    print(s)
    

    2.删

    print(s.pop())  # pop有返回值
    print(s)
    s.remove(3)     # 指定元素删除
    print(s)
    s.clear()         # 清空   -- set() 空集合
    print(s)
    

    3.改

    先删再加

    4.查

    for i in {1,2,3}:
        print(i)
    

    其他操作:

    s1 = {1,2,3,4,5,6,7}
    s2 = {5,6,7,1}
    print(s1 & s2)  # 交集 {1, 5, 6, 7}
    print(s1 | s2)  # 并集 {1, 2, 3, 4, 5, 6, 7}
    print(s1 - s2)  # 差集 {2, 3, 4}
    print(s1 ^ s2)  # 反交集      {2, 3, 4}
    print(s1 > s2)  # 父集(超集)  True
    print(s1 < s2)  # 子集        False
    print(frozenset(s1))  # 冻结集合 更不常用 frozenset({1,2,3,4,5,6,7})
    
    dic = {frozenset(s1):1}
    print(dic)      #{frozenset({1, 2, 3, 4, 5, 6, 7}): 1}
    
  • 相关阅读:
    fastjson(转)
    FastJson
    FastJson处理Map List 对象
    spring-data-redis RedisTemplate操作
    Spring-data-redis:特性与实例(转载)
    Spring Boot 支持多种外部配置方式
    springBoot----@ConditionalOnxxx相关注解总结
    Centos7 install Openstack
    Centos7 install Openstack
    Centos7 Openstack
  • 原文地址:https://www.cnblogs.com/beichen123/p/11172356.html
Copyright © 2020-2023  润新知