zoukankan      html  css  js  c++  java
  • 集合set() 和 深浅copy

    一、集合

    集合是无序的,不重复的数据集合,它里面的元素是可哈希(不可变类型),但是集合本身是不可哈希,(所以集合做不了字典的键)

    集合最重要的2点:  去重:把一个列表变成集合,就自动去重了。
    关系测试:    测试两组数据之间的交集、并集、差集等关系

    1.1创建set():

    1 set = set({ })
    2 set = { }

    1.2增

     1 add.()
     2 set = { }
     3 set.add(self, element)
     4 #set.add('kitty')
     5 
     6 update(self, iterable) 迭代添加
     7 set.update()  
     8 #set = {1,'d'}
     9 #set.update('龟叔')
    10 #print(set)
    11 #{1, '龟', 'd', '叔'}  

    1.3删

    1 pop(self)   随机删1个element
    2 remove(self, element)   指定删1个element
    3 clear(self)       清空set()
    4 del set       删集合本身    返回<class 'set'>

    集合交集、并集、差集、反交集、子集、超集:

     1 set1 = {1,2,3,4}                    
     2 set2 = {3,4,5,6}                    
     3 交集: 3,4                        set1 & set2      set1.intersection(set2)
     4 反交集:1,2,5,6                  set1 ^ set2      set1.symmetric_difference(set2) 
     5 并集:1,2,3,4,5,6                set1 | set2       set1.union(set2)          
     6 差集 :                                 
     7         set1 - set2 是 1,2         set1 - set2       set1.difference(set2)
     8         set2 - set1 是 3,4         ***----***       ****------------****
     9 
    10 set1 = {1,2,3]
    11 set2 = {1,2,3,4,5,6]
    12 子集:
    13             set1 < set2        set1.issubset(set2)         返回True or False 
    14 超集:
    15             set2 > set1        set2.issuperset(set1)      返回True or False

    不可变集合:(把集合变成可哈西的)

    1     set = frozenset(iteralbe)    迭代创建set()
    2         set = frozenset('abc')
    3         print(type(set))
    4         #frozenset({'b', 'c', 'a'})
    5         #<class 'frozenset'>

    二、深浅copy

    2.1浅copy:

    2.1.1赋值运算: (对于不可哈希类型:list dict set() )

    1         dic1 = {'name':'kitty','age':18}
    2         dic2 = dic1                                     对于不可哈希类型,dic1   dic2 都是指向同一地址,同步改变
    3         dic1['name'] = 'cat'
    4         print(dic1)
    5         print(dic2)
    6         #{'name': 'cat', 'age': 18}           
    7         #{'name': 'cat', 'age': 18}

    2.1.2 copy():

     1 [深copy]
     2         dic1 = {'name':'kitty','age':18}
     3         dic2 = dic1.copy()
     4         dic1['name'] = 'cat'
     5         print(dic1)
     6         print(dic2)
     7         {'name': 'cat', 'age': 18}
     8         {'name': 'kitty', 'age': 18}
     9 ----------
    10 ##########################
    11 -------[深copy,[浅copy] ]----------如果 copy(self)   对于不可哈希类型  list  dict  set()  如果内部有嵌套   内部是浅copy
    12     dic1 = {'name':['kitty','cat'],'age':18}
    13     dic2 = dic1.copy()
    14     dic1['name'][1] = 'dog'
    15     print(dic1)
    16     print(dic2)
    17     {'name': ['kitty', 'dog'], 'age': 18}
    18     {'name': ['kitty', 'dog'], 'age': 18}                               内部嵌套的list 仍然指向同一地址
    19 
    20     dic1 = {'name':{'class':'student'},'age':18}
    21     dic2 = dic1.copy()
    22     dic1['name']['class'] = 'teacher'
    23     print(dic1)
    24     print(dic2)
    25     {'name': {'class': 'teacher'}, 'age': 18}                        内部嵌套的dict 仍然指向同一地址
    26     {'name': {'class': 'teacher'}, 'age': 18}
    27 
    28     多层嵌套,第一层创建的是新的内存地址,从第二层开始,指向的都是同一内存地址,二层往下,同时更新变化

    2.2 深拷贝deepcopy()

     1     import copy
     2     copy.deepcopy()
     3         import copy
     4         dic1 = {'name':['kitty','cat'],'age':18}
     5         dic2 = copy.deepcopy(dic1)
     6         dic1['name'][1] = 'dog'
     7         print(dic1)
     8         print(dic2)
     9         {'name': ['kitty', 'dog'], 'age': 18}
    10         {'name': ['kitty', 'cat'], 'age': 18}
    11 对于deepcopy()来说,两个是完全独立的,不管嵌套多少层,都 不会 发生同步更新变化。
  • 相关阅读:
    Nginx 模块开发(1)—— 一个稍稍能说明问题模块开发 Step By Step 过程
    nginx上传模块—nginx upload module-
    解决nginx上传模块nginx_upload_module传递GET参数
    nginx upload module的使用
    Nginx Upload Module 上传模块
    产品需求分析神器:KANO模型分析法
    SpringBoot @ConditionalOnBean、@ConditionalOnMissingBean注解源码分析与示例
    BAT、网易、京东等如何做大数据风控的?
    springboot 2.x 集成 drools 7.x
    Drools介绍与使用
  • 原文地址:https://www.cnblogs.com/zhzhlong/p/7747254.html
Copyright © 2011-2022 走看看