zoukankan      html  css  js  c++  java
  • 数据类型总结,深浅拷贝

    数据类型总结,深浅拷贝

    存一个值还是多个值

    1. 一个值:整型,浮点型,字符串
    2. 多个值:列表,元祖,字典,集合

    有序 or 无序

    1. 有序:字符串,列表,元祖
    2. 无序:字典,集合

    可变 or 不可变

    1. 可变:列表,字典,集合

    2. 不可变:整型,浮点型,字符串

    浅拷贝和深拷贝的区别(只针对可变类型)

    1.拷贝:

    lis = [1,2,3,4]
    lis2 = lis     
    lis.append(5)
    print(lis)
    print(lis2)
    

    [1, 2, 3, 4, 5]
    [1, 2, 3, 4, 5]

    2.浅拷贝

    import copy
    
    lis = [1,[3, 4]]
    lis2 = copy.copy(lis)
    print(lis)
    print(lis2)
    
    lis.append(2)
    print(lis)
    print(lis2)
    
    lis[1].append(5)
    print(lis)
    print(lis2)
    

    [1, [3, 4]]
    [1, [3, 4]]


    [1, [3, 4], 2]
    [1, [3, 4]]


    [1, [3, 4, 5], 2]
    [1, [3, 4, 5]]

    3.深拷贝

    l1 = [1, [2, 3]]
    l2 = copy.deepcopy(l1)
    
    print(l1)
    print(l2)
    
    l1.append(2)
    print(l1)
    print(l2)
    
    l1[1].append(5)
    print(l1)
    print(l2)
    

    [1, [2, 3]]
    [1, [2, 3]]


    [1, [2, 3], 2]
    [1, [2, 3]]


    [1, [2, 3, 5], 2]
    [1, [2, 3]]

    总结:

    这些只是一种现象.

    拷贝:共用一片内存,l1发生改变则l2也会发生改变,因为l1是可变类型

    浅拷贝:另外开辟内存,共用其中元素的地址,当l1内部的不可变对象发生改变时,l2不发生改变,因为该元素的地址变了.当l1内部的可变对象发生了改变时,l2随之改变,因为地址不变

    深拷贝;另外开辟内存,共用元素中不可变对象的地址,l1改变,l2不变,两者互相独立,没有太大的关系

  • 相关阅读:
    Android 一个TextView中设置多种不同大小的字体,设置超链接
    Android Okhttp POST提交键值对
    第九天
    第八天
    第七天
    第六天
    第三天
    day 51
    day 49
    day 48 bootstrap
  • 原文地址:https://www.cnblogs.com/lucky75/p/10922413.html
Copyright © 2011-2022 走看看