zoukankan      html  css  js  c++  java
  • Python基础七(深浅copy以及int,str,tuple,list,dic补充)

    一:int,str,tuple,list,dic之间的转换及其补充

    1.转换

    1)int与str的转换
    int ----> str   str(int)
    str ----> int   int(str)      条件:全部由数字组成的字符串可以转化成数字
    2)int与bool的转换
    int ----> bool  非0是True   0是False
    bool----> int   True是1     False是0
    3)str与bool的转换
    str ----> bool  非空是True   空('')是False
    bool----> str       'True'          'False'
    4)str与list的转化
    str ----> list  split()      ()里有没有内容整个变成列表,()里有内容按内容分割成列表内元素,且()里内容不存在
    
    
    例如:
    s = 'alex,wusir,taibai'
    l1 = s.split()
    print(l1)             输出结果:['alex,wusir,taibai']
    l2 = s.split(',')
    print(l2)            输出结果:['alex', 'wusir', 'taibai']
    l3 = s.split('a')
    print(l3)            输出结果:['', 'lex,wusir,t', 'ib', 'i']
    
    
    list ----> str   用 ''.join()
    
    
    例如:
    li = ['alex','wusir','taibai']
    s1 = ''.join(li)
    print(s1)           输出结果:alexwusirtaibai
    s2 = '_'.join(li)
    print(s2)             输出结果:alex_wusir_taibai
    split ,join 的用法
    5)list与tuple的转换 (与int和str之间的转换相似
    tu = (1,2,3,{},[])
    l1 = list(tu)
    print(l1)             输出结果:[1, 2, 3, {}, []]
    
    li = [1,2,3,{},()]
    t1 = tuple(li)
    print(t1)             输出结果:(1, 2, 3, {}, ())
    View Code
    6)dic的特有类型与list的转换
    dic = {'k1':'alex','k2':'太白','k3':'日天','name':'wusir'}
    print(dic.keys())             输出结果:dict_keys(['k1', 'k2', 'k3', 'name'])
    print(list(dic.keys()))       输出结果:['k1', 'k2', 'k3', 'name']
    print(dic.values())           输出结果:dict_values(['alex', '太白', '日天', 'wusir'])
    print(list(dic.values()))     输出结果:['alex', '太白', '日天', 'wusir']
    print(dic.items)              输出结果:不能这样写,需要两个变量接收
    print(list(dic.items()))      输出结果:[('k1', 'alex'), ('k2', '太白'), ('k3', '日天'), ('name', 'wusir')]
    View Code

    2.tuple的补充

    当元组只有一个元素组成并且没有逗号则该元素是什么数据类型,整体就是什么数据类型.

    tu = ([1,2,3])
    tu1 = ([1,2,3],)
    print(tu,type(tu))           输出结果:[1, 2, 3] <class 'list'>
    print(tu1,type(tu1))         输出结果:([1, 2, 3],) <class 'tuple'>
    tu.append('333')
    print(tu,type(tu))           输出结果:[1, 2, 3, '333'] <class 'list'>

    3.list以及dic的删除

    1)list的删除(用for循环时索引值在变化直接删除会报错)
    li = [111,222,333,444,555]      #将索引为奇数位的元素删除.
    # 第一种:
    del li[1::2]
    print(li)
    
    # 第二种:
    li = [111,222,333,444,555]     
    l2 = []
    for i in range(len(li)):
        if i % 2 == 0:
            l2.append(li[i])
    li = l2
    print(li)
    
    # 第三种:
    li = [111,222,333,444,555]
    for i in range(len(li)-1,0,-1):      #倒着删除的时候索引不会发生变化,所以不会报错
        if i % 2 == 1:
            del li[i]
    print(li)
    三种方式
    2)dic的删除

    不可变的数据类型:可哈希

    dic = {'k1':'alex','k2':'太白','k3':'日天','name':'wusir'}       #删除含'k'元素的键值对
    li = []
    for k in dic:
        if 'k' in k:
            li.append(k)                 #把dic的keys添加到列表中再去删除
    for i in li:
        del dic[i]
    print(dic)

     

    4.fromkeys()的用法

    fromkeys()
    
    dic = dict.fromkeys('abc','alex')
    print(dic)                                              dic中的keys(字符串)中的元素迭代增加成新的键key,value值不变化
    输出结果:{'a': 'alex', 'b': 'alex', 'c': 'alex'}
    
    dic1 = dict.fromkeys([1,2,3],[])
    print(dic1)                                             dic中的keys(列表)中的元素 迭代增加成新的键key,value值不变                                             
    输出结果:{1: [], 2: [], 3: []}
    
    dic1[1].append('alex')
    print(dic1)                                             dic中迭代增加后一个value变化,其他的value值对应变化成该值
    输出结果:{1: ['alex'], 2: ['alex'], 3: ['alex']}

    二.list深浅拷贝

    1.赋值运算

    比较下面两个
    l1 = [1,2,3,4,'5']
    l2 = l1
    l1 = [1,2,3,4,'5',6]
    print(l1)             输出结果:[1, 2, 3, 4, '5', 6]
    print(l2)             输出结果:[1, 2, 3, 4, '5']
    
    l1 = [1,2,3,4,'5']
    l2 = l1                                对于赋值运算,就是指向同一内存地址
    l1.append(6)
    print(l1)             输出结果:[1, 2, 3, 4, '5', 6]
    print(l2)             输出结果:[1, 2, 3, 4, '5', 6]

    2.浅拷贝

    第一种:
    l1 = [1,2,3,4,'5']
    l2 = l1.copy()
    l1.append(6)
    print(l1)             输出结果:[1, 2, 3, 4, '5', 6]
    print(l2)             输出结果:[1, 2, 3, 4, '5']
    
    第二种
    l1 = [1,2,3,[6,7,8],4,'5']
    l2 = l1.copy()        #补充:l2 = l1[:](相当于浅拷贝)
    l1[3].append('9')
    print(l1)             输出结果:[1, 2, 3, [6, 7, 8, '9'], 4, '5']
    print(l2)             输出结果:[1, 2, 3, [6, 7, 8, '9'], 4, '5']
    
    
    对于浅copy来说,第一层都是独立的内存地址,从第二层开始,都是指向同一个内存地址,一变都变.

    3.深拷贝

    import copy
    l1 = [1,2,3,[6,7,8],4,'5']
    l2 = copy.deepcopy(l1)
    l1.append('0')
    l1[3].append('9')
    print(l1)             输出结果:[1, 2, 3, [6, 7, 8, '9'], 4, '5', '0']
    print(l2)             输出结果:[1, 2, 3, [6, 7, 8], 4, '5']
    
    
    对于深copy,无论多少层,在内存中都是两个独立的内存地址.

    三.dic的深浅拷贝(与list的深浅拷贝类似)

    1.浅拷贝

    #第一种
    dic1 = {1:'alex',2:['a','b'],3:('c','d')}
    dic2 = dic1.copy()
    dic1[1] = 'taibai'
    print(dic1)             输出结果:{1: 'taibai', 2: ['a', 'b'], 3: ('c', 'd')}
    print(dic2)             输出结果:{1: 'alex', 2: ['a', 'b'], 3: ('c', 'd')}
    
    #第二种
    dic1 = {1:'alex',2:['a','b'],3:('c','d'),4:{'name':'zhu','age':18}}
    dic2 = dic1.copy()
    dic1[4]['name'] = 'taibai'
    print(dic1)            输出结果:{1: 'alex', 2: ['a', 'b'], 3: ('c', 'd'), 4: {'name': 'taibai', 'age': 18}}
    print(dic2)            输出结果:{1: 'alex', 2: ['a', 'b'], 3: ('c', 'd'), 4: {'name': 'taibai', 'age': 18}}
    浅拷贝

    2.深拷贝

    import copy
    dic1 = {1:'alex',2:['a','b'],3:('c','d'),4:{'name':'zhu','age':18}}
    dic2 = copy.deepcopy(dic1)
    dic1[1] = 'taibai'
    dic1[4]['name'] = 'wusir'
    print(dic1)            输出结果:{1: 'taibai', 2: ['a', 'b'], 3: ('c', 'd'), 4: {'name': 'wusir', 'age': 18}}
    print(dic2)            输出结果:{1: 'alex', 2: ['a', 'b'], 3: ('c', 'd'), 4: {'name': 'zhu', 'age': 18}}
    深拷贝
  • 相关阅读:
    关于正餐智能POS6.0.1.1改版后,点击反结账进入点菜界面后无法进行加菜的FAQ
    关于正餐智能POS6.0.1.1改版后,订单模块无法进行部分退款的FAQ
    退款证书相关
    简易付主副机和打印机配置
    秒点直连操作文档
    智能POS打印配置&常见问题FAQ 12-14 后期持续更新
    ERP主副机和打印机配置FAQ
    ASP.NET没有魔法——ASP.NET MVC Controller的实例化与执行
    ASP.NET没有魔法——ASP.NET MVC 路由的匹配与处理
    ASP.NET没有魔法——ASP.NET MVC路由
  • 原文地址:https://www.cnblogs.com/zhuzhaoyang/p/8378494.html
Copyright © 2011-2022 走看看