揭秘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 对象 (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |