zoukankan      html  css  js  c++  java
  • 集合与深浅copy

    集合 set:

      set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。

    要创建一个set,需要提供一个list作为输入集合。

    >>> s = set([1, 2, 3])
    >>> s
    {1, 2, 3}
    

      注意,传入的参数[1, 2, 3]是一个list,而显示的{1, 2, 3}只是告诉你这个set内部有1,2,3这3个元素,显示的顺序也不表示set是有序的。。

    重复元素在set中自动被过滤:

    >>> s = set([1, 1, 2, 2, 3, 3])
    >>> s
    {1, 2, 3}
    

      通过add(key)方法可以添加元素到set中,可以重复添加,但不会有效果:

    >>> s.add(4)
    >>> s
    {1, 2, 3, 4}
    >>> s.add(4)
    >>> s
    {1, 2, 3, 4}
    

      通过remove(key)方法可以删除元素:

    >>> s.remove(4)
    >>> s
    {1, 2, 3}
    

      set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:

    >>> s1 = set([1, 2, 3])
    >>> s2 = set([2, 3, 4])
    >>> s1 & s2
    {2, 3}
    >>> s1 | s2
    {1, 2, 3, 4}
    

      

    set和dict的唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。试试把list放入set,看看是否会报错。

    集合的其他操作:

    交集。(&  或者 intersection)
    set1 = {1,2,3,4,5}
    set2 = {4,5,6,7,8}
    print(set1 & set2)  # {4, 5}
    print(set1.intersection(set2))  # {4, 5}
    
    并集。(| 或者 union
    set1 = {1,2,3,4,5}
    set2 = {4,5,6,7,8}
    print(set1 | set2)  # {1, 2, 3, 4, 5, 6, 7}
    
    print(set2.union(set1))  # {1, 2, 3, 4, 5, 6, 7}
    
    差集。(- 或者 difference)
    set1 = {1,2,3,4,5}
    set2 = {4,5,6,7,8}
    print(set1 - set2)  # {1, 2, 3}
    print(set1.difference(set2))  # {1, 2, 3}
    
    反交集。 (^ 或者 symmetric_difference)
    set1 = {1,2,3,4,5}
    set2 = {4,5,6,7,8}
    print(set1 ^ set2)  # {1, 2, 3, 6, 7, 8}
    print(set1.symmetric_difference(set2))  # {1, 2, 3, 6, 7, 8}
    
    子集与超集
    set1 = {1,2,3}
    set2 = {1,2,3,4,5,6}
    
    print(set1 < set2)
    print(set1.issubset(set2))  # 这两个相同,都是说明set1是set2子集。
    
    print(set2 > set1)
    print(set2.issuperset(set1))  # 这两个相同,都是说明set2是set1超集。
    
    frozenset不可变集合,让集合变成不可变类型
    s = frozenset('barry')
    print(s,type(s))  # frozenset({'a', 'y', 'b', 'r'}) <class 'frozenset'>
    

    深浅copy:

    #浅copy第一层在内层中时独立的,第二层开始以及更深的层次开始可以更改。
    # li = [1,2,3]
    # l2 = li.copy()
    # li.append(666)
    # print(l2)
    #深copy 这两个时完全独立的,互不影响
    #应用场景:完全独立的copy一分数据,与原数据没关系,深copy。如果一方数据(列表)第二层时,你想与元数据进行公用。
    #面试题:
    # l1 = [1,2,3,[22,33]]
    # l2 = l1[:]
    # l1.append(66)
    # # l1[-1].append(66)
    # print(l2)
    # import copy
    # l1 =[1,2,3,[22,]]
    # l2 = copy.deepcopy(l1)
    # # print(l1,l2)
    # l1[-1].append('taibai')
    # print(l2)
    # set1 = set({1,2,'baarry'})
    # set2 = {1,2,'barry'}
    # print(set1,set2)
    # set1 = {'alex','wusir','ritian','egon','barry'}
    # set1.update('A')
    # print(set1)
    # set1.update('老师')
    # print(set1)
    # set1.update([1,2,3])
    # print(set1)
    

      

  • 相关阅读:
    Linux 6 修改ssh默认远程端口号
    win7安装镜像注入USB3.0,NVMe驱动
    Spring Cloud(7):Zuul自定义过滤器和接口限流
    Spring Cloud(6):Zuul的基本使用
    Spring Cloud(5):Hystrix的使用
    Spring Cloud(4):Feign的使用
    Spring Cloud(3):Ribbon的使用
    Spring Cloud(2):搭建Eureka
    Spring Cloud(1):微服务简介
    SpringBoot 2.x (15):Actuator监控
  • 原文地址:https://www.cnblogs.com/buchiyudeyang/p/9454755.html
Copyright © 2011-2022 走看看