看图理解深浅拷贝

    技术2022-07-10  127

    深浅拷贝

    list 封装的copy 方法实现对列表的浅拷贝,浅拷贝只拷贝一层,具体拿例子说:

    In [38]: c =[1,3,5] In [39]: cc = c.copy()

    c和cc分别指向一片不同内存,示意图如下:

    这样修改cc的第一个元素,原来c不受影响:

    In [40]: cc[0]=10 # 修改cc第一个元素 In [41]: cc Out[41]: [10, 3, 5] In [42]: c # 原来 c 不受影响 Out[42]: [1, 3, 5]

    但是,如果内嵌一层列表,再使用copy时只拷贝一层:

    In [32]: a=[[1,3],[4,2]] In [33]: ac = a.copy() In [34]: ac Out[34]: [[1, 3], [4, 2]]

    上面的示意图清晰的反映出这一点,内嵌的列表并没有实现拷贝。因此再修改内嵌的元素时,原来的列表也会受到影响。

    In [35]: ac[0][0]=10 In [36]: ac Out[36]: [[10, 3], [4, 2]] In [37]: a Out[37]: [[10, 3], [4, 2]]

    要想实现深度拷贝,需要使用Python模块copy中的deepcopy方法。这是深拷贝,每一层都被拷贝。朋友们注意观察和上面浅拷贝的区别。

    以上就是列表深浅拷贝的区别,大家在平时使用中注意区别。原创不易,欢迎大家三连支持。

    Processed: 0.009, SQL: 9