深拷贝(copy.deepcopy())

深拷贝(copy.deepcopy())

知识准备
A,可变类型:列表,字典,集合
B,不可变类型:数字,字符串,元组

深拷贝(copy.deepcopy())
A,语法
copy.copy(变量名)
B,功能
对可变类型的每一层对象进行拷贝, 并对每一层拷贝的对象都会开辟新的内存存储空间,可以拷贝多层。
C,代码示例

C1, 不可变类型

运行代码

# 深拷贝copy.deepcopy()
import copy

# 不可变类型
print("--------------不可变类型-------------------")
#原始变量信息
Tint = 66
Tstring = "Welcome to China"
TtupleA = ('A', 'B', 'C')
TtupleB = ('a', 'b', 'c', [1, 2, 3], 'd')
print("打印原始变量信息")
print("Tint:", Tint, "数据类型:", type(Tint), "内存地址:", id(Tint))
print("Tstring:", Tstring, "数据类型:", type(Tstring), "内存地址:", id(Tstring))
print("TtupleA:", TtupleA, "数据类型:", type(TtupleA), "内存地址:", id(TtupleA))
print("TtupleB:", TtupleB, "数据类型:", type(TtupleB), "内存地址:", id(TtupleB))
#深拷贝
Tint_deepcopy = copy.deepcopy(Tint)
Tstring_deepcopy = copy.deepcopy(Tstring)
TtupleA_deepcopy = copy.deepcopy(TtupleA)
TtupleB_deepcopy = copy.deepcopy(TtupleB)
print("--------------------------------------")
print("打印深拷贝操作后变量信息")
print("Tint_deepcopy:", Tint_deepcopy, "数据类型:", type(Tint_deepcopy), "深拷贝-内存地址:", id(Tint_deepcopy))
print("Tstring_deepcopy:", Tstring_deepcopy, "数据类型:", type(Tstring_deepcopy), "深拷贝-内存地址:", id(Tstring_deepcopy))
print("TtupleA_deepcopy:", TtupleA_deepcopy, "数据类型:", type(TtupleA_deepcopy), "深拷贝-内存地址:", id(TtupleA_deepcopy))
print("TtupleB_deepcopy", TtupleB_deepcopy, "数据类型:", type(TtupleB_deepcopy), "深拷贝-内存地址:", id(TtupleB_deepcopy))
print("-----------------------------------------")
print("打印TtupleB变量,存在可变类型情况下的,原始信息及深拷贝后的信息")
print("TtupleB:", TtupleB, "数据类型:", type(TtupleB), "内存地址:", id(TtupleB))
print("TtupleB[3]:", TtupleB[3], "数据类型:", type(TtupleB[3]), "内存地址:", id(TtupleB[3]))
print("TtupleB_deepcopy", TtupleB_deepcopy, "数据类型:", type(TtupleB_deepcopy), "深拷贝-内存地址:", id(TtupleB_deepcopy))
print("TtupleB_deepcopy[3]", TtupleB_deepcopy[3], "数据类型:", type(TtupleB_deepcopy[3]), "深拷贝-内存地址:", id(TtupleB_deepcopy[3]))

运行结果

在这里插入图片描述

说明
深拷贝对可变类型的子对象也进行拷贝并开辟新的存储地址空间。在不可变类型变量中,存在可变类型数据时,拷贝的同时也对可变类型给予开辟新的存储地址空间(见示例中Ttuple[3]与Ttuple_deepcopy[3]的内存地址对比)。

C2,可变类型

运行代码

# 深拷贝copy.deepcopy()
import copy


print("------------可变类型-------------------pangfk")
#原始变量信息
Tlist = [10, 20, 30, ['A', 'B', [1, 2, 3], 'C'], 40]
print("--------------------------------------")
print("打印原始变量信息")
print("Tlist:", Tlist, "数据类型:", type(Tlist), "内存地址:", id(Tlist))
#深拷贝
Tlist_deepcopy = copy.deepcopy(Tlist)
print("-------------------------------------------")
print("打印深拷贝后变量信息-第一层")
print("Tlist:", Tlist, "数据类型:", type(Tlist), "深拷贝-内存地址:", id(Tlist))
print("Tlist_deepcopy:", Tlist_deepcopy, "数据类型:", type(Tlist_deepcopy), "深拷贝-内存地址:", id(Tlist_deepcopy))
print("-------------------------------------------")
print("打印深拷贝后变量信息-第二层")
print("Tlist[3]:", Tlist[3], "数据类型:", type(Tlist[3]), "深拷贝-内存地址:", id(Tlist[3]))
print("Tlist_deepcopy[3]:", Tlist_deepcopy[3], "数据类型:", type(Tlist_deepcopy[3]), "深拷贝-内存地址:", id(Tlist_deepcopy[3]))
print("-------------------------------------------")
print("打印深拷贝后变量信息-第三层")
print("Tlist[3][2]:", Tlist[3][2], "数据类型:", type(Tlist[3][2]), "深拷贝-内存地址:", id(Tlist[3][2]))
print("Tlist_deepcopy[3][2]:", Tlist_deepcopy[3][2], "数据类型:", type(Tlist_deepcopy[3][2]), "深拷贝-内存地址:", id(Tlist_deepcopy[3][2]))

运行结果

在这里插入图片描述

说明
深拷贝对于可变类型,不论你有多少层,它都会为拷贝的变量每一层数据开辟新的存储地址,即多层拷贝。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值