zoukankan      html  css  js  c++  java
  • 集合以及深浅拷贝和和小数据池--个人一些经验总结

    小数据池 --缓存机制

    ==哦按段两边你的内容是否相等

    a=10

    b=10

    print(a==b)

    is 是

    a=10

    b=10

    print(a is b) is 判断机遇内存地址就行判断

    print(id (a))

    print(id(b))

    小数据池的数字范围:-5~256

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

    支持三种数据类型

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

    数字在做乘法的时候范围-5~256 1252 在 130 2 不行

    数字在使用乘法的时候不能使用浮点数(-2.5*2)

    字符串

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

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

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

    1562812224585

    布尔值

    内容相同采用统一内存地址

    小数据池

    1562812394898

    数字 -5~256

    字符串

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

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

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

    布尔值

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

    cmd终端查看

    1562812436278

    执行顺序

    先执行代码块的规则,再进行小数据池的规则--驻留机制

    1562812466645

    必会#

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

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

    深浅拷贝

    面试必问

    1. 赋值,浅拷贝,深拷贝
      1. 赋值
    lst=[1,2,3,4,[5,6]]
    lst1=lst
    print(lst1)
    print(lst)
    print(id(lst1))
    print(id(lst))
    

    浅拷贝 ,浅拷贝的时候只会开辟一个新的容器列表其他元素使用的都是源列表中的元素.

    lst=[1,2,3,[4,5,6]]
    lst1=lst.copy
    s.append(7)
    print(lst)
    print(lst1)
    结果
    [1,2,3,[4,5,6],7]
    [1,2,3,[4,5,6]]
    
    2.
    s[-1].append(7)
    print(lst)
    print(lst1)
    结果
    [1,2,3,[4,5,6,7]]
    [1,2,3,[4,5,6,7]]
    #总结
    #浅拷贝的时候只拷贝第一层元素
    #浅拷贝在修改第一层元素(不可变数据类型)的时候,拷贝出来的新列表不进行改变
    #浅拷贝在替换第一层元素(不可变数据类型)的时候,拷贝出来的新列表不进行改变
    #浅拷贝在修改第一层元素中的元素(第二层)的时候,拷贝出来的新列表进行修改
    

    深拷贝

    import copy #导入
    lst=[1,2,3,[4,5,6,]]
    lst1=copy.deepcopy(lst)  #深拷贝
    lst[-1].append(7)
    print(lst)
    print(lst1)
    #结果
    [1, 2, 3, [4, 5, 6, 7]]
    [1, 2, 3, [4, 5, 6]]
    
    
    2
    lst.append(7)
    print(lst)
    print(lst1)
    #结果
    [1, 2, 3, [4, 5, 6], 7]
    [1, 2, 3, [4, 5, 6]]
    
    #深拷贝:深拷贝开辟一个容器空间(列表),不可变数据公用,可变数据数据类型(再次开辟一个新的空间),空间里的值是不可变的数据进行公用的,可变的数据类型再次开辟空间
    

    深浅拷贝

    1. 赋值:

    多个变量名指向同一个内存地址,一个变量对其进行操作,其他变量查看时都变动

    1. 浅拷贝:

    lst[1:10]-- 是浅拷贝,浅拷贝只拷贝第一层元素,修改第一层元素是,新开辟的不进行改变

    1. 深拷贝:

    不可变的数据类型共用,可变数据类型重新开辟一个空间,对源数据进行修改,深拷贝的内容不进行改变

    可变类型新拷贝的变

    不可变的新拷贝不变

    集合--set

    集合#没有值的字典 无需--不支持索引

    天然去重 去重复

    1. 定义集合

    s={1,"song",Flase,(1,2,3),12,1,12}

    print(s)

    ##面试题
    s=[1,2,3,1,33,56,3,4]
    print(list(set(s)))
    一行代码去重复 先转成集合去重再变成列表
    

    s={1,2,3,4}

    1. s.add("66") #只添加一下

    print(s)

    {1,2,3,4,"66"}

    1. s.update("今天") # 迭代添加

    print(s)

    {1,2,3,4,"今","天"}

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

    先删在加
    s.renmove(3)
    s,add(2)
    print(s)
    

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

    其他操作

    s1={1,2,3,4,5,6}

    s2={2,3,4}

    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)

    ***难免纰漏 欢迎交流 ***

  • 相关阅读:
    C# Mongo Client 2.4.2创建索引
    MongoDB Driver:使用正确的姿势连接复制集
    C# Mongo Client 2.4.2判断是否存在表
    c# Mongodb批量更新
    c# Mongodb创建自增列
    class A where T:new()是什么意思
    Dapper Extensions中修改Dialect
    golang 中的 sizeof 以及 golang中的 union
    将c语言的结构体定义变成对应的golang语言的结构体定义,并将golang语言结构体变量的指针传递给c语言,cast C struct to Go struct
    golang 与 c语言 之间传递指针的规则提案
  • 原文地址:https://www.cnblogs.com/sjf981012-/p/11170316.html
Copyright © 2011-2022 走看看