• python集合深浅copy


    01昨天内容回顾

     代码块:由一个文件,一个函数,一个模块,一个类,交互模式下每一行都是一个代码块

    Is == id:id()是查询内存地址,==比较两边的值,is是比较两边的内存地址。

    小数据池:

    在内存中创建一个池,提前存放了-5~256的整数,一定规则的字符串,后续程序中,如果设置的变量指向的是小数据内容,那就不会再内存中重新创建。

    1.节省内存

    2.提高性能和效率。

    小数据池和代码块的关系。

    同一个代码块:python在执行时,遇到了初始化对象,他会将这个变量和数值放在一个字典中,再次遇到他会从这字典中寻找。

    不同代码块:python执行中,直接从小数据池中寻找。满足条件id相同。

    编码:

    Str》bytes:encode

    Bytes》str:decode

     

    02作业讲解

    03 基础数据类型补充

    元祖:如果元祖中只有一个数据,且没有逗号,则还‘元祖‘与里面的数据的数据类型相同。Print()将会得到是属于元素的类型 ,得到的不是元祖。

    Tu1=(1)

    Print(tu1)得到的是元素

    Tu1=(1,)

    Tu2=(‘alex’,)

    Tu3=(【1,2,3】,)

    列表,元组,字符串互相转换

    列表和元组转换为字符串则必须依靠join函数

    列表:列表和列表可以相加

    L1=【1,2,3】

    L2=【‘alex’,‘wusir’】

    L3=l1+l3

    Print()

    在循环一个列表时,如果对列表中的某些元素进行删除,

    那么次元素后面的所有元素就会前进一位,他们索引位置 就会变,所以不能在循环的时候,进行增删

    Eg:# for i in range(len(li)-1,-1,-1):
    #     if i %2==1:
    #         li.pop(i)
    # print(li)

    字典

    Dic1=dic.fromkeys([1,2,3],’alex’)

    Print(dic1)

    在循环一个字典时,不能改变字典的大小(就是不能增减)。

    数据类型的转换。

    Int str bool 转换

    Str《》types

    Str《》list:字符串转换列表时用split,而list转换为字符串时,必须list全是字符串。

    04集合set

    增:有add。update#update:迭代着增加
    set1.update('A')print(set1)
    set1.update('老师')print(set1)
    set1.update([1,2,3])print(set1)

    删:

    set1 = {'alex','wusir','ritian','egon','barry'}
     
    set1.remove('alex')  # 删除一个元素print(set1)
     
    set1.pop()  # 随机删除一个元素print(set1)
     
    set1.clear()  # 清空集合print(set1)
    del set1  # 删除集合print(set1)

    Set:

    {‘name’,‘alex’,1,2,3}

    集合要求里面的元素必须是不可变的数据类型,但本身是可以变得,集合里面的元素不重复,无序。

    主要用途:

    1. 去重,
    2. 关系测试。

    List去重

    li=[1,2,2,3,4,6,1,3,]
    # set1=set(li)
    # li=list(set1)
    # # print(set1)
    # print(li)
    集合比如#
     set1=set({1,2,3})
    # set2=set1
    # print(id(set1),id(set2))
    地址是不一样的。
     
     
     
    1. 关系测试

    交集&intersection

    并集|union

    差集—difference

    反交集^ 或者 symmetric_difference

    子集和超集

    05   浅度copy

    对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。

    l1 = [1,2,3,['barry','alex']]

    l2 = l1.copy()

    print(l1,id(l1))  # [1, 2, 3, ['barry', 'alex']] 2380296895816

    print(l2,id(l2))  # [1, 2, 3, ['barry', 'alex']] 2380296895048

    l1[1] = 222print(l1,id(l1))  # [1, 222, 3, ['barry', 'alex']] 2593038941128print(l2,id(l2))  # [1, 2, 3, ['barry', 'alex']] 2593038941896

     l1[3][0] = 'wusir'

    print(l1,id(l1[3]))  # [1, 2, 3, ['wusir', 'alex']] 1732315659016

    print(l2,id(l2[3]))  # [1, 2, 3, ['wusir', 'alex']] 1732315659016

    05 深度copy

    对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变

    import copy

    l1 = [1,2,3,['barry','alex']]

    l2 = copy.deepcopy(l1)

    print(l1,id(l1))  # [1, 2, 3, ['barry', 'alex']] 2915377167816

    print(l2,id(l2))  # [1, 2, 3, ['barry', 'alex']] 2915377167048

    l1[1] = 222

    print(l1,id(l1))  # [1, 222, 3, ['barry', 'alex']] 2915377167816

    print(l2,id(l2))  # [1, 2, 3, ['barry', 'alex']] 2915377167048

    l1[3][0] = 'wusir'

    print(l1,id(l1[3]))  # [1, 222, 3, ['wusir', 'alex']] 2915377167240

    print(l2,id(l2[3]))  # [1, 2, 3, ['barry', 'alex']] 2915377167304

  • 相关阅读:
    读书笔记—CLR via C#线程25-26章节
    算法回顾--N皇后问题简单回顾
    编程拾趣--集合子集问题
    读书笔记—CLR via C#异常和状态管理
    读书笔记—CLR via C#字符串及文本
    设计模式---抽象工厂
    读书笔记—CLR via C#反射
    读书笔记—CLR via C#委托和attribute
    C#编程实践—EventBroker简单实现
    Linux平台屏幕录像工具RecordMyDesktop
  • 原文地址:https://www.cnblogs.com/13507215809qwer-/p/9512703.html
Copyright © 2020-2023  润新知