zoukankan      html  css  js  c++  java
  • 集合 copy


    #
    集合的创建 # set = set(["barry",1,2]) # print(set) # set1 = {1,2,3} #集合的增 # set1 = {'alex','wusir','ritian','egon','barry'} # set1.add("taibai") # # set1.update("taibai") #迭代追加 # print(set1) # # set1 = {'alex','wusir','ritian','egon','barry'} # # set1.pop() #随机删 # # set1.remove("alex") #指定元素删 # # set1.clear() #清空集合 # del set1 #删除集合 # print(set1) #交集 # set1 = {1,2,3,4,5} # set2 = {4,5,6,7,8} # print(set1 & set2) # {4, 5} # print(set1.intersection(set2)) # {4, 5} #并集 # 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} #差集 # 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} #反差集 # 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} #子集 是判断返回True或者False # ) # 这两个相同,都是说明set2是set1超集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) #集合属于可变的类型,集合里面的元素属于不可变类型 #frozenset 将集合冻结,使其成为不可变类型 # s = frozenset("barry") # print(s,type(s))

     集合set

      集合要求里面的元素必须是不可变的数据类型,即int,字符串,bool。但是集合本身属于可变的数据类型

      集合里面的元素是不重复的(所以具有天然去重的特点),集合是无序的

      主要作用是:

        1.去重  (面试题:将list去重)

            l1 = [1,1,2,1,3,4,5,6,4,2,"alex","alex"]

         做法: set1 = set(l1)

            l2 = list(set1)

            print(l2)    #结果为[1,2,3,4,5,6,"alex"]

        2.关系测试,

          交集  &  intersection

          并集   |   union

          反交集 ^  difference

          子集  <  issubset  判断,a,b为俩个集合,如果是True,则说明a 是b的子集

          超集  >  issuperset            如果是False,则说明a是b的超集

      增  add  update 

      删  pop  remove  clear(清空)   del (删除集合)

    将集合变成不可变的数据类型即  frozenset()  冻结

    # s = frozenset("barry")
    # print(s,type(s))        #frozenset({'y', 'b', 'a', 'r'}) <class 'frozenset'>

    深浅copy

    1赋值运算

      

    l1 = [1,2,3]
    l2 = l1
    l1.append(666)
    print(l1)
    print(l2)
    print(id(l1),id(l2))
    #[1, 2, 3, 666]
    [1, 2, 3, 666]

    2494346240904
    2494346240904

      对于赋值运算来说,l1与l2指向的是同一个内存地址,所以他们是完全一样的  即l1 is l2   为True

    2.浅copy

      对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。

    3.deepcopy    深拷贝

      对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。

      面试题(切片属于浅copy)

      

    l1 = [1,2,3,[22,33]]
    l2 = l1[:]
    # l1.append(666)
    l1[-1].append(666)
    print(l1,l2)    #[1, 2, 3, [22, 33, 666]] [1, 2, 3, [22, 33, 666]]
  • 相关阅读:
    Linux命令应用大词典-第11章 Shell编程
    Kubernetes 学习12 kubernetes 存储卷
    linux dd命令
    Kubernetes 学习11 kubernetes ingress及ingress controller
    Kubernetes 学习10 Service资源
    Kubernetes 学习9 Pod控制器
    Kubernetes 学习8 Pod控制器
    Kubernetes 学习7 Pod控制器应用进阶2
    Kubernetes 学习6 Pod控制器应用进阶
    Kubernetes 学习5 kubernetes资源清单定义入门
  • 原文地址:https://www.cnblogs.com/yuncong/p/9454639.html
Copyright © 2011-2022 走看看