zoukankan      html  css  js  c++  java
  • python 深浅拷贝&集合

    一、深浅拷贝

    1.浅拷贝,只会拷贝第一层

    s = [1, 'ss', '小可爱']
    s1 = s.copy()
    print(s1)

    >>>

    [1, 'ss', '小可爱']

    s = [1, 'ss', '小可爱']
    s1 = s.copy()
    s1[0] = 3  #修改s1的值
    print(s1)
    >>>
    [3, 'ss', '小可爱']
     
    #浅拷贝,只会拷贝第一层,修改完s1里面列表的值后,数据源也会改变
    s = [[1, 2], 'ss', '小可爱']
    s1 = s.copy()
    s1[0][1] = 3  #修改s1的值
    print(s1)
    print(s)

    >>>

    [[1, 3], 'ss', '小可爱']
    [[1, 3], 'ss', '小可爱']

    2.深拷贝 = 克隆一份

    import copy
    
    s = [[1, 2], 'ss', '小可爱']
    
    s1 = copy.deepcopy(s)
    s1[0][1] = 3  #修改s1的值
    
    print(s)
    print(s1)

    >>>

    [[1, 2], 'ss', '小可爱']
    [[1, 3], 'ss', '小可爱']
     

    二、集合:

        把不同的元素集合到一起,组成集合的成员不可重复如果有重复的元素保留一个

      主要作用:

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

                 2.关系测试,交集、并集等关系

        集合的创建:

           a = set('xiaoss baby')

           print(a)    # 输出:{'a', 'y', 'b', 'o', 'x', ' ', 'i', 's'}

      分类:可变集合、不可变集合

              可变集合(set):可添加和删除元素,非可哈希的,不能做字典的键和其他集合的元素

              不可变集合(frozenset):与上相反

      基本操作:

    li = ['xiao', 2, 5]
    s = set(li)
    
    s.add('baby') #添加一个元素
    print(s)
    
    s.update('ops') # 把要添加的字符串作为一个单独的序列加到集合里
    print(s)

    >>>

    {2, 'xiao', 'baby', 5}
    {2, 5, 'o', 'baby', 'p', 'xiao', 's'}
     
    li = ['xiao', 2, 5]
    s = set(li)
    
    s.update('ooo') # 重复的字符只添加一个到集合里
    print(s)

    >>>

    {'o', 2, 'xiao', 5}
     
    li = ['xiao', 2, 5]
    s = set(li)
    
    s.update([12, 'baby']) # 添加多个元素要放到一个容器里
    print(s)

    >>>

    {2, 5, 'baby', 12, 'xiao'}
     
    #删除操作
    li = ['xi', 2, 5]
    s = set(li)
    # 删除
    s.remove(2) # ()里存放要删除的内容
    s.pop()  # 随机删除一个
    s.clear()  # 清空
    del s  #  直接删除整个集合
    print(s)

    >>>

    print(set('qwer') == set('qwereq')) 
    # True 因为两者形成的集合结果一样,所以等价
    
    print(set('qwer') < set('qwerty'))
    #True   < 表示后者包含前者

    >>>

    True
    True
     
    # 联合操作
    print(set('qwer') or set('qwerty'))  # 取两者共同的
    print(set('qwer') and set('qwerty')) # 取两者包含的所有序列元素

    >>>

    {'w', 'e', 'q', 'r'}
    {'w', 'y', 'r', 't', 'e', 'q'}
     
    a = set([1, 2, 3, 4, 5])
    b = set([3, 4, 5, 6, 7])
    
    # intersection()   交集
    print(a.intersection(b))
    print(a & b)  #同上
    
    #union  并集
    print(a.union(b))
    print(a | b)   #同上
    
    # 差集(互相不在对方里面)
    print(a.difference(b)) # 在a不在b 或print(a - b)
    print(b.difference(a)) # 在b不在a 或print(b - a)
    
    # 反向交集
    print(a.symmetric_difference(b))
    
    # 父集  
    print(a.issuperset(b))  # 判断a是否完全包含于b
    
    # 子集
    print(a.issubset(b))

    >>>

    {3, 4, 5}
    {3, 4, 5}
    {1, 2, 3, 4, 5, 6, 7}
    {1, 2, 3, 4, 5, 6, 7}
    {1, 2}
    {6, 7}
    {1, 2, 6, 7}
    False
    False
  • 相关阅读:
    tensorflow基础【3】-Session、placeholder、feed、fetch
    tensorflow基础【2】-Variable 详解
    字符串处理、变量初始值处理、扩展的脚本技巧、正则表达式
    循环结构、while循环、case、函数及中断控制
    数值运算、条件测试、 if选择结构
    逻辑+系统管理命令
    PXE 装机服务器的搭建
    DNS服务器的功能
    RAID阵列概述,进程管理,日志管理,systemctl控制,源码包编译安装
    快照制作、vim编辑技巧、发布网络YUM源、查看本机网络连接信息
  • 原文地址:https://www.cnblogs.com/ss-long/p/10327118.html
Copyright © 2011-2022 走看看