• 集合和深浅拷贝


    1.集合

    1.1集合的形式

    1 s = set("cccdfed")        
    2 print(s)

    结果为:{'d', 'e', ' ', 'f', 'c'} 可以总结出:1 打印的是无重复的 2 内容时可hashed的 3 无序的 4 set本身的是不可hashed 5 set中只能是一个数据类型 若是有多个以列表等形式表现

    1.2一般操作

    1 print("ccc" in s1)     # 判断T OR F
    2 s1.add("sb")         # 添加到里面   {'ccc', 'sb', 'hesa'}
    3 s1.update("dee")     # {'ccc', 'd', 'hesa', 'e', 'sb'}  一个一个字母 会去重复
    4 s1.remove("ccc")     # 删除
    5 s1.pop()              # 删除 并返回
    6 s1.clear() 

    1.3特殊操作

    1.3.1交集

    1 a = set([1,2,3,4])
    2 b = set([3,4,5,6])
    3 print(a.intersection(b))   #{3, 4}
    4 print(a & b)

    1.3.2并集

    1 print(a.union(b))    # {1, 2, 3, 4, 5, 6}
    2 print(a | b)

    1.3.3补集

    1 print(a.difference(b)) #{1, 2}
    2 print(a - b)
    3 print(b.difference(a)) #{5, 6}
    4 print(b - a)
    5 print(a.symmetric_difference(b)) # {1, 2, 5, 6}

    1.4总结

    (1) 与列表的不同在于:列表是有序的,集合是无序的。列表中可以放置其他变量,集合中不能。

    (2) 与元组的不同在于:元组是不可修改的,集合中的可以修改。

    (3) 通过对集合的学习可以看到集合更在与整体处理上有着明显的优势,通过对集合的特殊操作可以进行查重等。集合的出现弥补了列表字典的整体处理的缺陷。

    (4)上述集合都是可变集合。

    2.深浅拷贝

    2.1浅拷贝

    1 s = [[1,2],"alex","ccc"]
    2 s1 = s.copy()
    3 s1[2] = "linux"    
    4 print(s)
    5 print(s1)
    6 s1[0][1] = 3  

    打印结果为:s [[1,2],"alex","ccc"]

    s1 [[1,2],"alex","Linux"]

    在第六行中修改了s1中列表中的列表的信息,s也会受到影响。这其中道理涉及到内存的理解。先看图理解:

    其中b浅拷贝于a。两者的储存效果如图。

    可以看到的是b在改变的0088地址的时候将小列表的地址改变,a同时又受到了影响。这种影响可以是积极的也可以是无用的。

    2.2深拷贝

    1 import copy
    2 s = [[1,2],3,4]
    3 s1 = copy.deepcopy(s)
    4 s1 [0][1] = 666
    5 print(s)
    6 print(s1)

    这种拷贝方式会完全将两者分离,双方之间没有影响。



  • 相关阅读:
    Vista修改网卡MAC地址防御ARP
    MySQL
    FirstWebSite
    Java
    python
    编码风格 标识符命名
    计算机体系结构基础
    编码风格 indent工具
    Linux发布web app 到Tomcat
    编码风格 函数
  • 原文地址:https://www.cnblogs.com/khal-Cgg/p/5848471.html
Copyright © 2020-2023  润新知