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
  • 相关阅读:
    SQLSERVER 2008 R2导入XLSX文件错误,提示报错:The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine. (System.Data)
    转-马斯洛需求层次理论
    邮件发送提示错误“0x800CCC0F”,并存留在发件箱
    WIN10系统JAVA环境配置
    转-简单了解Python装饰器实现原理
    set集合
    阿里云服务器地址及端口
    转:苹果手机同步阿里云邮箱日历
    官方:金蝶实际成本在制品分配详解
    官方:金蝶实际成本在制品材料分配详解
  • 原文地址:https://www.cnblogs.com/d9e84208/p/10571688.html
Copyright © 2011-2022 走看看