加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

揭秘Python list 深/浅拷贝原理

发布时间:2021-11-07 02:17:27 所属栏目:语言 来源:互联网
导读:1. python list的深/浅拷贝 python 有一种常用数据类型:list,使用list时经常需要考虑一件事件,那就是:浅拷贝与深拷贝。 至于什么是深浅拷贝,先从一个示例代码来分析一下: import copy # list 测试使用的源数据 lists = [[1, 2, 3], 4, 5, 6] def low_co
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 对象

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读