zoukankan      html  css  js  c++  java
  • 基本数据的补充、深浅拷贝

    一.关于基本数据类型的补充:

    1."".join()方法   #把列表里字符串(必须全都是字符串才能用此方法)转换成一个字符串类型   

    li = ["我爱你1314","哈哈","呵呵"]
    a = "_".join(li)    #把参数迭代,每个元素和前面的*进行拼接,得到的是字符串
    print(a)
    打印结果为:我爱你1314_哈哈_呵呵    #是一个字符串

    2.split()   #把字符串转换成列表 

    lst="我爱你1314_哈哈_呵呵"
    a = lst.split("_")
    print(a)
    输出结果为:['我爱你1314', '哈哈', '呵呵']  #换成了列表

    3.关于删除

    在for循环中不要使用"方法"删除,有些删除方法(remove())会删不干净漏删,而且有些删除方法(del())还会报错

    迭代删除有两种方法:

    1)全部删除
    for
    i in range(0,len(i)): #循环len(li)次,然后从后往前删除 li.pop()  #因为是循环了这个列表的长度,所以都被准确删除 print(li)  
    2)精确删除,指定删除目标
    li = [11, 22, 33, 44]
    del_li=[]    #创建个空列表
    for i in li:
        del_li.append(e)     #将旧列表里想删除的值放到新列表里
    for e in del_li:    #迭代新列表
        li.remove(e)    #用新列表的元素,循环删除旧列表
    print(li)

    4.关于字典的fromkeys()方法  

    fromkeys(),可以帮我们通过list来创建一个dict   
    把第一个参数进行迭代,拿到每一项作为key和后面的value组成子典 dic
    = dict.fromkeys(["jay","JJ"],['周杰伦","麻花藤"]) print(dic) 结果:{'jay': ['周杰伦', '麻花藤'], 'JJ': ['周杰伦', '麻花藤']}
    --------------------------------------------  
    dic={'jay': ['周杰伦', '麻花藤'], 'JJ': ['周杰伦', '麻花藤']}
    dic.get("jay").append("胡⼤大") 
    print(dic)
    结果: {'jay': ['周杰伦', '麻花藤', '胡⼤大'], 'JJ': ['周杰伦', '麻花藤', '胡⼤大']}

    #代码中只是更改了jay那个列表. 但是由于jay和JJ指向的是同一个列表. 所以. 前面那个改了. 后面那个也会跟着改
    如果非得想改单项,可以这样:
    dic={'jay': ['周杰伦', '麻花藤'], 'JJ': ['周杰伦', '麻花藤']}
    dic["jay"]="哈哈"#给它重新赋值,重新指向

    关于fromkeys()方法的坑

    # 坑1: 返回新字典. 和原来的字典没有关系
    dic = {}
    d = dic.fromkeys("风扇哥", "很困")
    print(dic) # {}
    print(d)
    输出结果为:{} {'风': '很困', '扇': '很困', '哥': '很困'}
    # 坑2: 如果value是可变的数据类型, # 那么其中一个key对应的value执行的更改操作. 其他的也跟着变 d = dict.fromkeys("胡辣汤", []) print(d) # {'胡': [], '辣': [], '汤': []} print(id(d[''])) print(id(d[''])) print(id(d[''])) d[''].append("河南特色") print(d) # {'胡': ['河南特色'], '辣': ['河南特色'], '汤': ['河南特色']}

    二.深浅拷贝

    1)浅拷贝

    lst1 = ["你好","我好","大家好",["呵呵","哈哈"]]
    lst2 = lst1.copy()  #copy的是第一层,并没有复制后独立存储,依然受到lst的影响.
    lst1[3].append("嘻嘻")
    print(lst1)
    print(lst2)
    输出结果为:['你好', '我好', '大家好', ['呵呵', '哈哈', '嘻嘻']]
                     ['你好', '我好', '大家好', ['呵呵', '哈哈', '嘻嘻']] 
    #copy的只是第一层,并没有拷贝后独立存储,依然受到lst的影响.

    2)深拷贝

    引入一个cope模块的deepcopy()方法
    import copy
    lst1 = ["你好","我好","大家好",["呵呵","哈哈"]]
    lst2 = copy.deepcopy(lst1)
    lst1[3].append("嘿嘿") #apeend()方法直接再原内容上改了,所以不写接收
    print(lst1)
    print(lst2)
    输出结果为:

    ['你好', '我好', '大家好', ['呵呵', '哈哈', '嘿嘿']]
    ['你好', '我好', '大家好', ['呵呵', '哈哈']]

    深浅拷贝的作用

    1.提高创建对象的速度

    2.计算机中最慢的,就是创建对象,需要分配内存.

    3.最快的方式就是二进制流的形式进行复制,速度最快

  • 相关阅读:
    Shell变量、函数
    Shell
    springMVC基础讲解
    Spring(二)--IoC&AOP
    Spring(一)--简介
    Mybatis(二)--SqlMapConfig.xml配置文件
    Mybatis(一)--简介
    框架的介绍
    博文推荐 | 下一代消息平台 Pulsar 到底是什么
    Pulsar 2.7.0 新增特性概览:事务支持、Topic 级别策略配置等
  • 原文地址:https://www.cnblogs.com/lgw1171435560/p/10064965.html
Copyright © 2011-2022 走看看