zoukankan      html  css  js  c++  java
  • 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])
    
  • 相关阅读:
    iOS开发富文本制作 图片和文字/NSMutableParagraphStyle/NSMutableAttributedString
    LintCode-Previous Permuation
    LintCode-Heapify
    LintCode-Median II
    LintCode-Longest Increasing Subsequence
    LintCode-Kth Largest Element
    LintCode-Majority Number III
    LintCode-Majority Number II
    LintCode-Majority Number
    LintCode-Subarray Sum
  • 原文地址:https://www.cnblogs.com/yellowcloud/p/10838227.html
Copyright © 2011-2022 走看看