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 对象
揭秘Python list 深/浅拷贝原理
1. python list的深/浅拷贝 python 有一种常用数据类型:list,使用list时经常需要考虑一件事件,那就是:浅拷贝与深拷贝。 至于什么是深浅拷贝,先从一个示例代码来分析一下: import copy # list 测试使用的源数据 lists = [[1, 2, 3], 4, 5, 6] def low_
本文来自网络,不代表站长网立场,转载请注明出处:https://www.tzzz.com.cn/html/biancheng/yuyan/2021/1106/20845.html