• day07 深浅拷贝


    今日主要内容
    1. 基础数据部分的补充
      1. join: 把列表中的数据进行拼接。 拼接成字符串

    lst = ["alex", "wusir", "ritian", "taibai"]
    
    s = '_'.join(lst) 
    print(s)

     

      字符串转化成列表: split()
      列表转化成字符串:join()
      x->y类型 y(x)
      表示False的数据类型: False, 0, "", [], tuple(), dict(), set(), None.

     2. 关于删除:
      列表和字典在for循环的时候都不能删除。因为删除时,元素的索引会发生改变
      把要删除的内容保存在新列表中。 循环新列表。 删除老列表(字典)

    lst = ["王大锤", "王有才", "张小白", "刘大哥"]
    for el in lst:
        lst.remove(el) 
    print(lst)
    #删除不彻底,  剩下['王有才', '刘大哥']
    
    new_lst = []   #装要删除的内容
    for el in lst:
        new_lst.append(el)
    #循环新列表的元素,对应找出原来列表的元素
    for el in new_lst:
        lst.remove(el)  #根据新列表的元素,删除老列表的元素
    print(lst)

    lst = ["王大锤", "王有才", "张小白", "刘大哥"]
    #删除姓王的
    new_lst = []
    for el in lst:
        if el.startswith(''):
            new_lst.append(el)
    for el in new_lst:
        lst.remove(el)
    print(lst)

      

    dic = {"jay":'周杰伦', "jj":"林俊杰 ", "jack": "莱昂纳多迪卡普里奥"}
    #清空字典
    lst = []  #建立新的列表,把需要删除的内容保存
    for k in dic:
        lst.append(k)
    for el in lst:
        dic.pop(el)
    print(dic)

      3. fromkeys

      dict.fromkeys(iterable, value)
      把可迭代对象进行迭代。 和后面的value组合成键值对 返回新字典

    d = dict.fromkeys("周杰伦", "王尼玛")
    print(d)
    {'': '王尼玛', '': '王尼玛', '': '王尼玛'}
    #第一项iterable ,共享value

      坑1: 返回新字典。不会改变原来的字典    fromkeys是一个staticmethod 静态方法

      dic = {}
      dic.fromkeys(xxx, xxx)
      print(dic)          # 结果是{}   

      d = dic.fromkeys(xxx, xxx) #这样创建的字典有内容

    dic = {}
    # d = dic.fromkeys("周杰伦", "王尼玛")
    d = dict.fromkeys("周杰伦", "王尼玛")  #或者
    print(d)   # {'周': '王尼玛', '杰': '王尼玛', '伦': '王尼玛'}
    dict.fromkeys("周杰伦", "王尼玛")
    print(dic)  #{}


      坑2:    你的value如果是可变的数据类型。 所有的key都可以改动这个数据。 一个改动, 所有的value都跟着改变

      d = fromkeys(xxx.[])
      字典中的所有的value都是同一个列表

    d = dict.fromkeys('周杰伦', ['哇哈哈'])
    print(d)
    #{'周': ['哇哈哈'], '杰': ['哇哈哈'], '伦': ['哇哈哈']}
    d[''].append('爽歪歪')
    print(d)
    #{'周': ['哇哈哈', '爽歪歪'], '杰': ['哇哈哈', '爽歪歪'], '伦': ['哇哈哈', '爽歪歪']}

    2. set集合
      特点:无序不重复。 内部元素必须可哈希(不可变数据类型)

      集合其实就是字典. 集合里面不存value , 集合中只存储key
      应用: 去重  (重点)  
    lst = ["周杰伦", "周杰伦", "王力宏", "王力宏", "胡辣汤"]
    s = set(lst)
    print(s)   #去重  {'王力宏', '周杰伦', '胡辣汤'}
    print(list(s))  # 转换为列列表   可以不用重新赋值变量

      增删改查:

       1. add() 添加  重复内容不会被添加

       2.pop()  随机弹出一个

       3.remove()    指定元素删除  ,如果元素不存在  报错

       4.集合的数据没有索引  修改需要先删除后添加  即:先用.remove()   再.add()

       5.for 循环 查询 

      常用操作

        交集: s1.intersection(s2)  或者  s1 & s2

        并集:  s1.union(s2)  或者  s1 | s2

        差集:  s1.difference(s2)  或者  s1 - s2

        反交集:  s1.symmetric_difference(s2)   或者  s1 ^ s2

        子集: s1.issubset(s2)   或者 s1 <  s2

        超集: s1.issupperset(s2)   或者  s1 > s2

        

    3. 深浅拷贝(画图理解)
      1. = 赋值操作没有创建新的对象。 此时 两个变量指向的是同一个内存地址

    lst1 = ["孙悟空", "贝吉塔", "卡卡罗特"]
    lst2 = lst1 # 赋值
    
    lst1.append("短笛")
    
    print(lst1)  #['孙悟空', '贝吉塔', '卡卡罗特', '短笛']
    print(lst2)  #['孙悟空', '贝吉塔', '卡卡罗特', '短笛']
    
    print(id(lst1), id(lst2))   #1046493921032 1046493921032

      2. copy() 或者 [:] 浅拷贝。 拷贝第一层内容

      浅拷贝的问题
      # 优点: 省内存.
      # 缺点: 容易出现同一个对象被多个变量所引用

      3. 深拷贝
      import copy
      copy.deepcopy() 深度拷贝。 把对象内部的所有内容都拷贝一份

      深拷贝
      # 有点: 完全拷贝出一份两个对象之间除了数据相同。 没有任何关系
      # 缺点: 占内存

      作用: 快速创建对象

  • 相关阅读:
    注释总结
    C# Notes
    坑爹的Honor10开热点
    用热得快烧洗澡水
    跳转语句
    台湾书籍代购网址——2013-08-25 16
    【转】cocos2d-x 模仿计时器效果,动态增加分数——2013-08-25 16
    【转】C/C++中的日期和时间 TIME_T与STRUCT TM转换——2013-08-25 16
    【转】Cocos2d-x 2.0 拖尾效果深入分析
    cocos2d-x之CCMotionStreak类——2013-08-25 16
  • 原文地址:https://www.cnblogs.com/Knight-huang/p/9850831.html
Copyright © 2020-2023  润新知