首页 / 语言 / 揭秘Python list 深/浅拷贝原理

揭秘Python list 深/浅拷贝原理

1. python list的深/浅拷贝
python 有一种常用数据类型:list,使用list时经常需要考虑一件事件,那就是:浅拷贝与深拷贝。
 
至于什么是深浅拷贝,先从一个示例代码来分析一下:
 
import copy
 
# list 测试使用的源数据
lists = [[1, 2, 3], 4, 5, 6]
 
def low_copy():
    # list 浅拷贝
    low_list = copy.copy(lists)
    return list(low_list)
 
def deep_copy():
    # list 深拷贝
    deep_list = copy.deepcopy(lists)
    return list(deep_list)
 
if __name__ == "__main__":
    print("源 list:", lists)
    #  分别获取 浅拷贝、深拷贝 list对象
    lists_c = low_copy()
    lists_d = deep_copy()
    print("浅拷贝 list:", lists_c)
    print("深拷贝 list:", lists_c)
 
    print("========================")
    # 对源数据的 第0下数据追加数值7
    print("对源list的第0下数据追加数值7,start")
    lists[0].append(7)
    print("对源list的第0下数据追加数值7,end")
    print("========================")
 
    # 源数据的 第0下数据追加数值7 之后验证,深浅拷贝数据的变化
    print("源 list:", lists)
    print("浅拷贝 list:", lists_c)
    print("深拷贝 list:", lists_d)
 
    # 执行结果
    #  
    # 源 list: [[1, 2, 3], 4, 5, 6]
    # 浅拷贝 list: [[1, 2, 3], 4, 5, 6]
    # 深拷贝 list: [[1, 2, 3], 4, 5, 6]
 
    # ========================
    # 对源list的第0下数据追加数值7,start
    # 对源list的第0下数据追加数值7,end
    # ========================
 
    # 源 list: [[1, 2, 3, 7], 4, 5, 6]
    # 浅拷贝 list: [[1, 2, 3, 7], 4, 5, 6]
    # 深拷贝 list: [[1, 2, 3], 4, 5, 6]
通过示例代码可以看出:在对list进行浅拷贝、深拷贝之后,对源数据进行修改,则会直接影响浅拷贝的数据,深拷贝的数据则无影响。
 
这说明了什么,具体又是怎么实现的呢?
 
2. pyhton list 的实现
首先,要说明几点:
 
python 底层源码使用C语言实现
在 python 中一切皆对象(整数、字符串,甚至类型、函数等都是对象)
python的对象,大概分为以下几种:
 
参考 https://flaggo.github.io/python3-source-code-analysis/objects/object/
 
解密 python list 深/浅拷贝 原理
Fundamental 对象: 类型对象
Numeric 对象: 数值对象
Sequence 对象

本文来自网络,不代表糖果站长网立场,转载请注明出处:https://www.1tg.com.cn/html/biancheng/yuyan/2021/1107/16708.html

dawei作者

【声明】:糖果站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。
上一篇
下一篇

为您推荐

联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息
返回顶部

【免责声明】本站内容转载自互联网,其发布内容言论不代表本站观点,如果其链接、内容的侵犯您的权益,烦请提交相关链接至邮箱xwei067@foxmail.com我们将及时予以处理。

Copygight © 2013-2023 https://www.1tg.com.cn All Rights Reserved.糖果站长网

站长:xwei067#foxmail.com(请把#换成@)