zoukankan      html  css  js  c++  java
  • 基本数据类型补充以及深浅拷贝

    一、基本数据类型补充

      1.join()

      使用前面的字符串对后面的列表进行拼接,拼接的结果是一个字符串

    lst = ["alex", "dsb", "wusir", "xsb"]
    s = "_".join(lst)
    print(s)
    

      

      把字符串转化成列表:split()

      把列表转化成字符串:join()

    print("*".join("周润发"))  # 用迭代的方式进行的拼接
    

      

      2.关于删除

        列表删除

    lst = ["篮球", "排球" ,"足球", "电子竞技", "台球"]
    lst.clear()
    ##除了这种删除方法还有一种
    

      

      循环新列表删除老列表

    lst = ["篮球", "排球" ,"足球", "电子竞技", "台球"]
    # # 最合理的删除方式:
    # # 1. 把要删除的内容写在新列表中.
    # # 2. 循环这个新列表. 删除老列表
    #
    # # 需求: 删除列表中代球字的运动项目
    new_lst = []
    for el in lst:
        if "球" in el:
            new_lst.append(el) # 记录要删除的内容
    # # 要删除的列表
    print(new_lst)
    # # 循环新列表. 删除老列表
    for el in new_lst: # ['篮球', '排球', '足球', '台球']
        lst.remove(el)
    print(lst)
    

        

        字典删除

        字典在被循环的时候不能删除的

    # # 把要删除的key保存在一个新列表中
    # # 循环这个类表.删除字典中的key:value
    lst = []
    for k in dic:
        lst.append(k)
    # # 循环列表
    # # 删除字典中的内容
    for el in lst:
        dic.pop(el)
    print(dic)
    

      

      集合和字典是一家人

      集合:元素必须是不可变的,可hash的,不重复

      字典:key必须是不可变的,可hash的,不重复

    dic = {"韦一笑":"青翼蝠王", "韦一笑":"张无忌"}
    dic['韦一笑'] = "应天正" # 修改
    print(dic)
    

      

      fromkeys()帮我们创建字典用的,把第一个参数进行迭代. 拿到每一项作为key和后面的value组合成字典。例如:(大坑)

    d = dict.fromkeys("张无忌", "赵敏") # 创建字典
    print(d)
    

      坑爹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、= 没有创建对象,只是把内存地址进行了复制

       我把list1增加了一个元素"葫芦娃",lst2也增加了

    lst1 = ["胡辣汤", "灌汤包", "油泼面", "麻辣香锅"]
    lst2 = lst1  # 并没有产生新对象. 只是一个指向(内存地址)的赋值
    print(id(lst1))
    print(id(lst2))
    #
    lst1.append("葫芦娃")
    print(lst1)
    print(lst2)
    

      

      拷贝,抄作业,可以帮我们创建新的对象,和原来长的一模一样,浅拷贝

    lst1 = ["胡辣汤", "灌汤包", "油泼面", "麻辣香锅"]
    lst2 = lst1.copy()  # 拷贝, 抄作业, 可以帮我们创建新的对象,和原来长的一模一样, 浅拷贝
    #
    print(id(lst1))
    print(id(lst2))
    #
    lst1.append("葫芦娃")
    print(lst1)
    print(lst2)
    

      

      但是浅拷贝遇到下面的这种情况就不好用了,浅拷贝只能拷贝第一层内容

    lst1 = ["胡辣汤", "灌汤包", "油泼面", "麻辣香锅", ["长白山", "白洋淀", "黄鹤楼"]]
    lst2 = lst1.copy() # 浅拷贝. 只拷贝第一层内容
    #
    print(id(lst1))
    print(id(lst2))
    #
    print(lst1)
    print(lst2)
    #
    lst1[4].append("葫芦娃")
    print(lst1)
    print(lst2)
    

      

      接下来就需要我们的深拷贝了

      deepcopy 深拷贝:对象内部的所有内容都要复制一份,深度克隆,原型模式

      首先导入一个模块

    # 首先引入一个模块
    import copy
    
    lst1 = ["胡辣汤", "灌汤包", "油泼面", "麻辣香锅", ["长白山", "白洋淀", "黄鹤楼"]]
    lst2 = copy.deepcopy(lst1) # 深拷贝: 对象内部的所有内容都要复制一份. 深度克隆(clone). 原型模式
    
    print(id(lst1))
    print(id(lst2))
    
    print(lst1)
    print(lst2)
    
    lst1[4].append("葫芦娃")
    print(lst1)
    print(lst2)
    

      为什么要有深浅拷贝?

      1.提高创建对象的速度

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

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

  • 相关阅读:
    el-select下拉框选项太多导致卡顿,使用下拉框分页来解决
    vue+elementui前端添加数字千位分割
    Failed to check/redeclare auto-delete queue(s)
    周末啦,做几道面试题放松放松吧!
    idea快捷键
    解决flink运行过程中报错Could not allocate enough slots within timeout of 300000 ms to run the job. Please make sure that the cluster has enough resources.
    用.net平台实现websocket server
    MQTT实战3
    Oracle 查看当前用户下库里所有的表、存储过程、触发器、视图
    idea从svn拉取项目不识别svn
  • 原文地址:https://www.cnblogs.com/guchenxu/p/10066746.html
Copyright © 2011-2022 走看看