zoukankan      html  css  js  c++  java
  • 删除补充/集合/深浅拷贝

    1.关于删除(重点)
      1.join可以把列表转化字符串
      join里面内容迭代
      2.for el in lst:
      lst.remove(el)
      # 内部有一个变量来记录当前被循环的位置
      # 直接删除是删不干净的,
      # 原因是每次删除都涉及到元素移动
      先把要删除的内容保存到一个新列表里面 循环这个新列表
      删除老列表
      tem = []
      for el in lst:
        tem.append(el)
      for el in tem:
        lst.remove(el)
      print(lst)
    3.fromkeys
      是一个类方法 作用是创建新字典
      d = dict.fromkeys(["我哈哈", "test"], [])
      d["test"].append("张无忌")
      # 所用key用的同一个列表 改变一个 另外一个也跟着改变
      print(id(d["test"]), id(d["我哈哈"]))
      print(d)
      """
      1918219439752 1918219439752
      {'我哈哈': ['张无忌'], 'test': ['张无忌']}
      """


    2.set集合
      这里面的元素是无序可/哈希的
      其实就是不存value的字典
      去重===>最大的应用

      1.增加
        s.add("") #添加
        s.update("xxx") #迭代更新
      2.pop() 随机弹出 返回删除结果
        s.remove("xxx") #指定内容
        s = set{}
        s = {1,2,3}
      3.修改
        先删除再添加
      4.查询 for el in s:
        print(el)
        #可迭代的查询

      5.其他操作
        1.交集
          s1&s2
        2.并集
        3.差集
        4.反交集
        5.子集
        6.超集
     面试题:在0-99里面生成10个随机数要求,不能重复

     1 import random
     2 
     3 # 取10个随机数 要求不能重复
     4 nums = set()
     5 count = 0
     6 
     7 while count < 10:
     8     nums.add(random.randint(0, 99))
     9     count = len(nums)
    10 print(nums)
    View Code

    3.深浅拷贝(难点)
      1.赋值没有创建对象,多个变量共享同一个对象

    1 lst1 = ["赵敏", "蛛儿", "小昭", "周芷若"]
    2 lst2 = lst1
    3 lst1.append("张无忌")
    4 print(lst2, id(lst1), id(lst2))
    5 """
    6 ['赵敏', '蛛儿', '小昭', '周芷若', '张无忌'] 3028745675336 3028745675336
    7 """
    View Code


      2.浅拷贝:会创建新对象。新的对象里面的内容不会拷贝

      

     1 lst1 = ["赵敏", "蛛儿", "小昭", "周芷若", ["金毛狮王", "白眉鹰王"]]
     2 lst2 = lst1.copy()
     3 lst1[4].append("张无忌")
     4 print(lst1)
     5 print(lst2)
     6 print(id(lst1), id(lst2))
     7 print(id(lst1[4]),id(lst2[4]))
     8 
     9 """
    10 ['赵敏', '蛛儿', '小昭', '周芷若', ['金毛狮王', '白眉鹰王', '张无忌']]
    11 ['赵敏', '蛛儿', '小昭', '周芷若', ['金毛狮王', '白眉鹰王', '张无忌']]
    12 2097090355848 2097119153864
    13 2097090355784 2097090355784
    14 """
    View Code


      3.深拷贝:创建一个一模一样的完全的对象,这个对象衍生出来的

      

     1 import copy
     2 lst1 = ["赵敏", "蛛儿", "小昭", "周芷若", ["金毛狮王", "白眉鹰王"]]
     3 lst2 = copy.deepcopy(lst1)
     4 lst1[4].append("张无忌")
     5 print(lst1)
     6 print(lst2)
     7 print(id(lst1), id(lst2))
     8 print(id(lst1[4]),id(lst2[4]))
     9 
    10 """
    11 ['赵敏', '蛛儿', '小昭', '周芷若', ['金毛狮王', '白眉鹰王', '张无忌']]
    12 ['赵敏', '蛛儿', '小昭', '周芷若', ['金毛狮王', '白眉鹰王']]
    13 2999280550344 2999280557704
    14 2999280398856 2999280556680
    15 """
    View Code

      
      内容也会跟着赋值一份
      这个是面试内容,平时用得少

    面试题

     1 # -*- coding: utf-8 -*-
     2 # @Time    : 2019/5/22 8:16
     3 # @Author  : Scavenger
     4 # @FileName: 49.py
     5 # @Software: PyCharm
     6 # @Github  : https://github.com/dgfwork/
     7 # @Blog    : https://www.cnblogs.com/gaofeng-d/
     8 import copy
     9 
    10 # 直接赋值  浅拷贝 深拷贝 之间的区别
    11 a = [1, 2, 3, [4, 5, [7, 8, 9]], 6]
    12 
    13 b = a
    14 c = copy.copy(a)
    15 d = copy.deepcopy(a)
    16 b.append(10)
    17 c[3].append(11)
    18 # 直接赋值  指向同一个地址
    19 # 浅拷贝  只新建一份外层  里面的列表 还是指向同一个内存地址
    20 print(id(a), id(b), id(c), id(d))
    21 print(id(a[3]), id(b[3]), id(c[3]), id(d[3]))
    22 print(id(a[3][2]), id(b[3][2]), id(c[3][2]), id(d[3][2]))
    23 
    24 d[3].append(12)
    25 print(a)
    26 print(b)
    27 print(c)
    28 print(d)
    View Code
  • 相关阅读:
    Can't remove netstandard folder from output path (.net standard)
    website项目的reference问题
    The type exists in both DLLs
    git常用配置
    Map dependencies with code maps
    How to check HTML version of any website
    Bootstrap UI 编辑器
    网上职位要求对照
    Use of implicitly declared global variable
    ResolveUrl in external JavaScript file in asp.net project
  • 原文地址:https://www.cnblogs.com/d9e84208/p/10571688.html
Copyright © 2011-2022 走看看