python第七天,,一、集合    集合


一、集合

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

    主要功能:

      1.去重,把一个列表变成集合,就自动去重了。

      2.关系测试,测试两组数据之前的交集、差集、并集等关系。

    1.创建集合     

      set = {‘a‘,‘b‘,‘c‘}
      set = set({‘a‘,‘b‘,‘c‘})
      print(set)

    2.增  

      set.add(‘asd‘)    #增加
      set.update(‘asd‘)   #迭代加,一个一个加

    3.删除

      set.remove(‘alex‘)  #按元素删

      set.pop()      #随机删除

      set.clear()      #清空,返回值为 set()

      del set       #删除字集

    4.查

      print(set)

    5.其他操作

     set1 = {1,2,3,4,5}
     set2 = {4,5,6,7,8}

      1)交集(set1和set2相同元素)

        print(set1 & set2)
        print(set1.intersection(set2))

      2)并集(set1和set2所有的元素)

        print(set1 | set2)
        print(set1.union(set2))

      3)差集(set1里有set2里没有的元素)

        print(set1 - set2)
        print(set1.difference(set2))

      4)反交集(set1和set2不同的元素)

        print(set1 ^ set2)
        print(set1.symmetric_difference(set2))

      5)子集(set1里元素set2里是否都有)

        print(set1 < set2)
        print(set1.issubset(set2))

      6)超集(set2里是否有se1所有元素)

        print(set2 > set1)
        print(set2.issuperset(set1))

      7)不可变合集(frozenset)      

        set1 = {4,5}
        set2 = frozenset(set1)
        print(set2,type(set2))

        结果:frozenset({4, 5}) <class ‘frozenset‘>

二、深入copy

    1.赋值运算     

      l1 = [1,2,3,[‘alex‘,‘barry‘]]
      l2 = l1

      l1[0] = 111
      print(l1 is l2)

    l1和l2指向的都是同一个内存地址,所以更改l1,l2也会更改。

    2.浅copy

    l1 = [1,2,3,[‘alex‘,‘barry‘]]
    l2 = l1.copy()

    l1.append(‘as‘)
    print(l1 is l2)    #结尾为False,l1加上内容后,l1不等于l2

      

    l1 = [1,2,3,[‘alex‘,‘barry‘]]
    l2 = l1.copy()

    l1[3].append(‘sa‘)
    print(l1[3] is l2[3])    结果为True,l1里的列表变换l2里的列表也跟着变换。

    结论:浅copy第一层是不一样的内存地址,但是第二层或更深层还是用的同一个内存地址。

    3.深copy

    为了解决浅copy问题,使用copy模块。

    import copy
    l1 = [1,2,3,[‘alex‘,‘barry‘]]
    l2 = copy.deepcopy(l1)

    l1[3].append(‘sa‘)
    print(l1 is l2)

    这样l1和l2的内存地址就完全就不一样了

python第七天

评论关闭