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.最快的方式就是二进制流的形式进行复制,速度最快!

  • 相关阅读:
    队列

    有序数组
    集合:一条规则决定性能
    基础数据结构:数组
    空间复杂度
    插入排序
    重新认识Javascript的一些误区总结
    Knockout: 使用knockout validation插件进行校验, 给未通过校验的输入框添加红色边框突出显示.
    Knockout: 使用CSS绑定和event的blur失去焦点事件, 给未通过校验的输入框添加红色边框突出显示.
  • 原文地址:https://www.cnblogs.com/guchenxu/p/10066746.html
Copyright © 2011-2022 走看看