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 对象

dawei

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