佳木斯网站制作,win7用本地文件做网站模板,做网站和做产品,第二季企业网站开发1. Python3 关于深浅拷贝的官方文档 文档地址#xff1a;Python3.7.2源码地址#xff1a;lib/copy.py2. 先说结论 深拷贝与浅拷贝是对复合对象而言的深拷贝会构造一个新的复合对象#xff0c;然后递归地将在原始对象中所有元素的副本对应地写入新复合对象中浅拷贝会构造一个…1. Python3 关于深浅拷贝的官方文档 文档地址Python3.7.2源码地址lib/copy.py2. 先说结论 深拷贝与浅拷贝是对复合对象而言的深拷贝会构造一个新的复合对象然后递归地将在原始对象中所有元素的副本对应地写入新复合对象中浅拷贝会构造一个新的复合对象然后在允许的前提下向其中写入对原始对象的引用3. 开始分析 复合对象包含其他对象的对象如列表、类实例等模块、方法、堆栈跟踪、堆栈帧、文件、套接字、窗口、数组等不能被拷贝示例# 例1import copy # 导入 copy 模块list1_1 [0, 1, 2, [a, b]]
list1_2 list1_1 # 赋值
list1_3 list1_1.copy() # 浅拷贝;同 list1_3 list1_1[:]
list1_4 copy.copy(list1_1) # 浅拷贝
list1_5 copy.deepcopy(list1_1) # 深拷贝# 打印出拷贝后的 list1_1 ~ list1_5
print(list1_1 , list1_1)
print(list1_2 , list1_2)
print(list1_3 , list1_3)
print(list1_4 , list1_4)
print(list1_5 , list1_5)
print(-*40) # 分割线list1_1.append(4) # 在 list1_1 末尾添加一个元素 4
list1_1[3].append(c) # 向 list1_1 中内嵌的列表末尾添加一个元素 c# 打印出更改后的 list1_1 ~ list1_5
print(list1_1 , list1_1)
print(list1_2 , list1_2)
print(list1_3 , list1_3)
print(list1_4 , list1_4)
print(list1_5 , list1_5) list1_1 [0, 1, 2, [a, b]] list1_2 [0, 1, 2, [a, b]] list1_3 [0, 1, 2, [a, b]] list1_4 [0, 1, 2, [a, b]] list1_5 [0, 1, 2, [a, b]] ---------------------------------------- list1_1 [0, 1, 2, [a, b, c], 4] list1_2 [0, 1, 2, [a, b, c], 4] list1_3 [0, 1, 2, [a, b, c]] list1_4 [0, 1, 2, [a, b, c]] list1_5 [0, 1, 2, [a, b]] 由例1 可看出 简单的赋值只是将引用传给新对象新旧对象除变量名外毫无区别原对象中非第一层的可变元素发生变化时浅拷贝的新对象中的对应元素同步变化深拷贝的新对象是一个真正的副本不随原对象的改变而改变补充 拷贝后的新对象占用新的空间但其内部的元素指向原对象内部对应元素的地址原对象中非第一层的不可变元素重新生成时浅拷贝的新对象中的对应元素保持不变转载于:https://www.cnblogs.com/yorkyu/p/10328162.html