• 小学生都能学会的python(深浅拷贝)


    小学生都能学会的python(深浅拷贝)

    join() 把列表中的每一项用字符串拼接起来

    # lst = ["汪峰", "吴君如", "李嘉欣", "陈慧琳", "关之琳"]
    # # 遍历列表. 把列表中的每一项用"_" 做拼接
    # s = "_".join(lst) # 把列表转化成字符串
    # print(s)
    #
    #
    # s1 = "汪峰_吴君如_李嘉欣_陈慧琳_关之琳"
    # ls = s1.split("_") # 把字符串转化成列表
    # print(ls)
    
    # print("*".join("马化腾"))
    

      


    split() 相反
    1. 关于删除(重点)
    1. 循环迭代过程中不能删除。
    2. 创建新列表。 把要删除的内容保存在新列表中。 循环新列表, 删除老列表
    3. 字典在循环的时候可以修改, 但不能新增和删除

    # lst = ["渣渣辉", "古天绿", "陈小春", "彭佳慧", "郑中基", "胡辣汤"]
    # # lst.clear()
    # # for el in lst: # for 内部有一个变量来记录当前被循环的位置, 索引.
    # #     lst.remove(el) # 直接删除. 是删不干净的. 原因是每次删除都设计到元素的移动. 索引在变.
    #
    # # 先把要删除的内容保存在一个新列表中. 循环这个新列表. 删除老列表
    # 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 = {"谢逊": '金毛狮王', "韦一笑":"青翼蝠王","殷天正":"白眉鹰王","金花婆婆":"紫衫龙王"}
    # for k in dic:
    #     dic['谢逊'] = "张无忌他爹"
    # print(dic)
    

      

    dict.fromkeys(k, v)
    把key迭代。和value组合成k:v创建新字典, 所有的key共享同一个value

    # d = {}
    # # fromkeys正常来说应该是类名来访问的.
    # dd = d.fromkeys(["胡辣汤","are you 确定?"], "周芷若") # fromkeys是一个类方法.作用是创建新字典
    # print(d) # 原字典没有改变
    # print(dd) # 新的字典是通过第一个参数的迭代. 和第二个参数组合成key:value创建新字典
    
    # d = dict.fromkeys(["哇哈哈", "爽歪歪"], []) # 所有的key用的都是同一个列表,改变其中一个。 另一个也跟着改变
    # d["哇哈哈"].append("张无忌")
    # print(d)
    #
    # print(id(d['哇哈哈']), id(d["爽歪歪"]))
    

      


    2. set集合(粗略)
    特点: 无序, 去重, 哈希
    lst = []
    list(set(lst)) # 去重复

    # dic = {"a":"哇哈哈", "a":"爽歪歪"}
    # print(dic) # key 不会重复
    # dic[[1,2,3]] = "哇哈哈" # 必须是可哈希的
    
    # s = set() # 空集合
    # s = {1,2,3,6,3,4,6,4, [4,5,6]} # 不重复, 必须是可哈希的
    # print(s)
    
    # set其实就是不存value的字典. 只存key
    # 去重复
    # lst = [1,2,3,4,4,4,4,5,5,6,7,7,7]
    # s = set(lst)
    # lst = list(s)
    # print(lst)
    
    s = {"赵本山", "范伟", "小沈阳", "高秀敏", "宋小宝"}
    # s.add("赵铁柱")
    # s.add("李小花")
    # s.add("王尼玛")
    # s.add("张全蛋")
    # print(s)
    #
    # s.update(("刘伟", '张伟', "张三丰")) # 迭代更新
    
    # item = s.pop()
    s.remove("小沈阳")
    print(s)
    # print(item)
    
    # for el in s:
    #     print(el)
    

      


    3. 深浅拷贝(难点)
    1. 赋值。 不会产生新对象。 和拷贝没关系
    2. 浅拷贝。 只会复制自身。 会创建对象
    2. 深拷贝。 把内部所有的内容都进行拷贝。

    # lst1 = ["太白","日天","哪吒","银王","金王"]
    # lst2 = lst1
    # lst1.append("女神")
    # print(id(lst1))
    # print(id(lst2))
    
    # lst1 = ["太白","日天","哪吒","银王","金王"]
    # # lst2 = lst1[:]  # 创建了新列表
    # lst2 = lst1.copy() # 会创建新对象, 创建对象的速度会很快.
    # lst1.append("女神")
    # print(lst1)
    # print(lst2)
    
    # lst1 = ["太白","日天",["盖浇饭", "锅包肉", "吱吱冒油的猪蹄子"],"哪吒","银王","金王"]
    # lst2 = lst1.copy() # 会创建新对象, 创建对象的速度会很快.
    # # lst1[2].append("油泼扯面")
    # print(id(lst1[2]), id(lst2[2]))
    
    # 导入拷贝模块
    # import copy
    # lst1 = ["太白","日天",["盖浇饭", "锅包肉", "吱吱冒油的猪蹄子"],"哪吒","银王","金王"]
    # lst2 = copy.deepcopy(lst1)
    # print(id(lst1[2]), id(lst2[2]))
    
    # 赋值没有创建新对象。多个变量共享同一个对象
    # 浅拷贝。 会创建新对象。 新的对象中里面的内容不会被拷贝
    # 深拷贝。 创建一个一摸一样的完全新的对象。 这个对象延伸出来的内容也会跟着复制一份
    
    
    a = [1, 2]
    a[1] = a
    print(a[1])
    

      

  • 相关阅读:
    洛咕11月月赛部分题解 By cellur925
    POJ 2411 Mondriaan's Dream 【状压Dp】 By cellur925
    Luogu P1637 三元上升子序列【权值线段树】By cellur925
    Luogu P1438无聊的序列【线段树/差分】By cellur925
    Luogu P1558 色板游戏【线段树/状态压缩】By cellur925
    Luogu P4403 [BJWC2008]秦腾与教学评估【二分答案】By cellur925
    Luogu P3941 入阵曲【前缀和】By cellur925
    查询事件状态,mysql查看事件是否开启,设置启动时自动开启方法
    Logback详细整理,基于springboot的日志配置
    使用release自动打包发布正式版详细教程
  • 原文地址:https://www.cnblogs.com/konghui/p/9670233.html
Copyright © 2020-2023  润新知