• 6.数据类型总结和深浅拷贝


    数据类型总结

    按存储空间的占用分-从低到高(了解)

    1. 数字
    2. 字符串:有序,不可变
    3. 集合:无序,即无序存索引相关信息
    4. 元组:有序,需要存索引相关信息,不可变
    5. 列表:有序,需要存索引相关信息,可变,需要处理数据的增删改
    6. 字典:无序,需要存key与value映射的相关信息,可变,需要处理数据的增删改

    按存值个数区分(掌握)

    存值个数 数据类型
    单个值 数字,字符串
    多个值(容器) 列表,元组,字典,集合

    按可变不可变区分(掌握)

    可变or不可变 数据类型
    可变 列表,字典,集合
    不可变 数字,字符串,元组

    有序无序区分(掌握)

    有序or无序 数据类型
    有序(可按索引取值) 字符串,列表,元组
    无序 字典,集合

    按访问类型区分(了解)

    访问类型 数据类型
    直接访问 数字
    顺序访问(序列类型) 字符串,列表,元组
    key值访问(映射类型) 字典

    浅拷贝和深拷贝(掌握)

    浅拷贝

    拷贝的是地址引用。可以找到共同的内容

    地址一样,内容一样

    一方修改了,另一方受影响

    a = [1, 2, 3, 4]
    b = a
    print(id(a))
    print(id(b))
    a.append(5)
    print(a)
    print(b)
    4586377800
    4586377800
    [1, 2, 3, 4, 5]
    [1, 2, 3, 4, 5]
    

    深拷贝

    深拷贝的是内容一样。地址不一样。

    一方修改了,另一方不受影响。

    b = copy.deepcopy(a),b得到的内容与a的内容完全一样,地址不一样。

    就算a中有对象引用,b中对应的引用的对象依然是内容一样,地址不一样。

    注意:如果是一个不可变对象(内部存储还是不可变对象),深拷贝的结果 = 浅拷贝,地址一样,因为不可变对象值变id也会跟着变化,也就是说只有可变对象有深拷贝。

    # 这个是深拷贝
    import copy
    a = [1, 2, 3, 4]
    b = copy.deepcopy(a)
    print(id(a))
    print(id(b))
    print(a)
    print(b)
    a.append(5)
    print(a)
    print(b)
    4586325448
    4586084168
    [1, 2, 3, 4]
    [1, 2, 3, 4]
    [1, 2, 3, 4, 5]
    [1, 2, 3, 4]
    # 这个是浅拷贝
    import copy
    a = (1, 2, 3, 4)
    b = copy.deepcopy(a)
    print(id(a))
    print(id(b))
    print(a)
    print(b)
    4586310136
    4586310136
    (1, 2, 3, 4)
    (1, 2, 3, 4)
    # 这个是深拷贝
    import copy
    a = (1, 2, 3, 4, [1, 2])
    # a = (1,2,3,4,(1,2))  这是浅拷贝
    b = copy.deepcopy(a)
    print(id(a))
    print(id(b))
    print(a)
    print(b)
    4585640448
    4585131968
    (1, 2, 3, 4, [1, 2])
    (1, 2, 3, 4, [1, 2])
    # 这个是深拷贝
    import copy
    a = [11, 22, 33]
    b = [44, 55, 66]
    c = (a, b)
    d = copy.deepcopy(c)
    print(id(c))
    print(id(d))
    print(c)
    print(d)
    a.append(120)
    # c[0].append(120)
    print(c)
    print(d)
    4585904264
    4586160712
    ([11, 22, 33], [44, 55, 66])
    ([11, 22, 33], [44, 55, 66])
    ([11, 22, 33, 120], [44, 55, 66])
    ([11, 22, 33], [44, 55, 66])
    
  • 相关阅读:
    (转)大型网站架构演化发展历程
    Android编译错误, Ignoring InnerClasses attribute for an anonymous inner class
    (转)写让别人能读懂的代码
    JVectorMap地图插件.Net版开源
    (转)淘宝技术发展
    (转)史上最全的MSSQL复习笔记
    (转)jieba中文分词的.NET版本:jieba.NET
    (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)
    (转)分布式中使用Redis实现Session共享(二)
    (转)分布式中使用Redis实现Session共享(一)
  • 原文地址:https://www.cnblogs.com/yellowcloud/p/10838227.html
Copyright © 2020-2023  润新知