• 元组、字典、集合内置方法, 深浅拷贝


    元组内置方法

    作用

    元组可以看成只可取不可修改的列表,元组一创建就被写死了

    定义方式

    ()内用逗号隔开多个元素(可以为任意数据类型)

    tup = tuple((1, 2, 3))
    print(tup, type(tup))
    
    # 如果元组只有一个元素,必须得加逗号
    tup1 = (1,)
    print(tup1, type(tup1))
    

    使用方法

    tup = (1,2,3,4,5,)
    
    # 1.索引取值
    print(tup[1])   # 2
    
    # 2.切片
    print(tup[1:4])  # (2, 3, 4)
    
    # 3.for循环
    for i in tup:
        print(tup)
        
    # 4.len长度
    print(len(tup))   # 5
    
    # 5.in / not in
    print(0 in tup)   # False
    
    # 6.index获取索引
    print(tup.index(1))   # 0
    
    # 7.count计数
    print(tup.count(1))   # 1
    

    有序or无序

    元组能索引取值,是有序的

    可变or不可变

    算是不可变吧

    字典内置方法

    作用

    存储多个值,对每个数据有描述意义

    定义方式

    {}内用逗号隔开多个键key(具有描述意义,不能为可变数据类型):值value(任意数据类型)

    使用方法

    dic = {'a':1, 'b':2}
    
    # 1.按key取值
    print(dic['a'])  # 1
    
    # 2.按key修改值
    dic['a'] = 666
    print(dic)  #  {'a': 666, 'b': 2}
    
    dic['c'] = 3   # 没有就加值
    print(dic)   # {'a': 666, 'b': 2, 'c': 3}
    
    # 3.for循环
    for i in dic:
        print(i)  # 只能取到key值
        
    # 4.in / not in 
    print('a' in dic)   # True
    
    # 5.len
    print(len(dic))   # 3
    
    # 6.keys/values/items 
    print(dic.keys())      # dict_keys(['a', 'b', 'c'])
    print(dic.values())    # dict_values([666, 2, 3])
    print(dic.items())     # dict_items([('a', 666), ('b', 2), ('c', 3)])
    
    # 7.get
    print(dic.get('a'))   # get取值,如果没有返回None
    
    # 8.update
    dic1 = {'a': 1, 'c': 2}
    dic2 = {'b': 1, 'd': 2}
    dic1.update(dic2)
    print(dic1)   # {'a': 1, 'c': 2, 'b': 1, 'd': 2}
    
    # 9.fromkeys  创建一个新字典,如没有value值,默认None
    print(dic.fromkeys(['a','b','c'], 1))   # {'a': 1, 'b': 1, 'c': 1}
    
    # 10.# setdefault  # 字典有这个key,就不修改,没有则增加
    dic.setdefault('j', 2)
    dic.setdefault('a', 2)
    print(dic)
    

    有序or无序

    字典无序

    可变or不可变

    字典可变

    集合内置方法

    作用

    进行 交集 / 并集 / 补集等运算,可以去重,但是集合内元素是乱序的

    定义方式

    {}内以逗号隔开多个元素(不能可为变数据类型)

    s = {'a', 'a', 'a', 'a', 1, 'v', 2, 2, 'c', 3, 3, 4, 5, 6}  # 对于数字而言,不会乱序;但是对于其他,就乱序
    print(s)
    # {1, 2, 'a', 3, 4, 5, 6, 'v', 'c'}
    

    使用方法

    se1 = {'cwz', 'neo', 'woods'}
    se2 = {'reese', 'chars', 'cwz'}
    
    # 1.并集
    print(se1 | se2)    # {'neo', 'reese', 'cwz', 'woods', 'chars'}
    
    # 2.交集
    print(se1 & se2)    # {'cwz'}
    
    # 3. 差集
    print(se1 - se2)    # {'neo', 'woods'}
    
    # 4.补集
    print(se1 ^ se2)   # {'reese', 'chars', 'neo', 'woods'}
    
    # 5.add
    se1.add('sad')
    print(se1)          # {'neo', 'sad', 'woods', 'cwz'}
    
    # 6.remove / discard
    se1.remove('neo')  # 没有的,删除用remove会报错
    print(se1)            # {'sad', 'woods', 'cwz'}
    
    se2.discard('chars')  # 没有的,删除用discard不会报错
    print(se2)            # {'cwz', 'reese'}
    
    # 7.pop
    se1.pop()   # 随机删除值
    print(se1)  # {'woods', 'cwz'}
    

    有序or无序

    无序

    可变or不可变

    可变

    数据类型总结

    存值个数

    • 存一个值:整型 / 浮点型 / 字符串
    • 存多个值:列表 / 元组 / 字典 / 集合

    有序or无序

    • 有序:字符串 / 列表 / 元组
    • 无序:字典 / 集合

    可变or不可变

    • 可变:列表 / 字典 / 集合
    • 不可变:整型 / 浮点型 / 字符串 / 元组

    深浅拷贝

    可变or不可变

    id值不可变,就是在原值基础上修改,为可变数据类型;

    id值变化,就是重新申请一块内存空间放入新值,为不可变数据类型。

    拷贝

    如果lt2是lt1的拷贝对象,则lt1内任何数据类型的元素变化,lt2也跟着变化。

    lt1 = [1,2,3,4,'a',[1,23,5]]
    lt2 = lt1
    print(lt1)
    print('lt1_id: ', id(lt1))
    lt1.append('b')
    print('*'*50)
    print(lt1)
    print('lt1_id: ', id(lt1))
    print(lt2)
    print('lt2_id: ', id(lt2))
    
    # 打印结果:
    [1, 2, 3, 4, 'a', [1, 23, 5]]
    lt1_id:  1990616507080
    **************************************************
    [1, 2, 3, 4, 'a', [1, 23, 5], 'b']
    lt1_id:  1990616507080
    [1, 2, 3, 4, 'a', [1, 23, 5], 'b']
    lt2_id:  1990616507080
    

    浅拷贝

    如果lt2是lt1的浅拷贝对象,则lt1内的不可变元素发生了变化,lt2不变;

    如果lt1内的可变元素发生了改变,则lt2跟着改变

    import copy
    
    lt1 = [1, 2, 3, 4, 'a', [1, 23, 5]]
    lt2 = copy.copy(lt1)
    lt1.append(99)
    print('lt1: ', lt1)
    print('lt1_id: ', id(lt1))
    print('lt2: ', lt2)
    print('lt2_id: ', id(lt2))
    print('*'*50)
    lt1[5].append('qq')
    print('lt1[5]: ', lt1)
    print('lt1[5]_id: ', id(lt1))
    print('lt2: ', lt2)
    print('lt2_id: ', id(lt2))
    
    # 打印结果:
    lt1:  [1, 2, 3, 4, 'a', [1, 23, 5], 99]
    lt1_id:  2049177903816
    lt2:  [1, 2, 3, 4, 'a', [1, 23, 5]]
    lt2_id:  2049299510728
    **************************************************
    lt1[5]:  [1, 2, 3, 4, 'a', [1, 23, 5, 'qq'], 99]
    lt1[5]_id:  2049177903816
    lt2:  [1, 2, 3, 4, 'a', [1, 23, 5, 'qq']]
    lt2_id:  2049299510728
    

    深拷贝对象

    如果lt2是lt1的深拷贝对象,则lt1内的不可变数据类型元素改变,lt2不变;

    如果lt1内的可变数据类型元素改变,lt2不变

    import copy
    
    lt1 = [1, 2, 3, [4, 5, 6]]
    lt2 = copy.deepcopy(lt1)
    
    print('id(lt1)', id(lt1))
    print(id(lt1[0]))
    print(id(lt1[1]))
    print(id(lt1[2]))
    print(id(lt1[3]))
    print(id(lt1[3][0]))
    print(id(lt1[3][1]))
    print(id(lt1[3][2]))
    
    print('*' * 50)
    
    print('id(lt2)', id(lt2))
    print(id(lt2[0]))
    print(id(lt2[1]))
    print(id(lt2[2]))
    print(id(lt2[3]))
    print(id(lt2[3][0]))
    print(id(lt2[3][1]))
    print(id(lt2[3][2]))
    
    # 打印结果:
    id(lt1) 2156612313800
    140728121221968
    140728121222000
    140728121222032
    2156612313736
    140728121222064
    140728121222096
    140728121222128
    **************************************************
    id(lt2) 2156760304520
    140728121221968
    140728121222000
    140728121222032
    2156642018504
    140728121222064
    140728121222096
    140728121222128
    
  • 相关阅读:
    学习、发现和创造一切皆有规律
    Ubuntu12.04下建立交叉编译环境、使用QEMU模拟CortexA9、QEMU运行uboot
    基于ARM的SoC设计入门[zz]
    ARM指令集详解[zz]
    电子工程自学步骤与书籍非电子专业
    IC设计的前端和后端[zz]
    [转]用C#获取IE临时文件
    二行代码解决全部网页木马(含iframe/script木马)(zt)
    winform 分页控件,源码下载
    在UpdatePanel中GridView导出EXECL问题
  • 原文地址:https://www.cnblogs.com/setcreed/p/11544687.html
Copyright © 2020-2023  润新知