站长网 语言 揭秘Python list 深/浅拷贝原理

揭秘Python list 深/浅拷贝原理

1. python list的深/浅拷贝 python 有一种常用数据类型:list,使用list时经常需要考虑一件事件,那就是:浅拷贝与深拷贝。 至于什么是深浅拷贝,先从一个示例代码来分析一下: import copy # list 测试使用的源数据 lists = [[1, 2, 3], 4, 5, 6] def low_

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.tzzz.com.cn/html/biancheng/yuyan/2021/1106/20845.html

作者: dawei

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

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

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

返回顶部