python deepcopy性能_Python中的copy.copy()和copy.deepcopy()区别在哪里?

首先,说明一下几点:

对象之间赋值时是按引用传递的引用就是原对象和新对象引用关系,但是里边的元素共用一个内存。

拷贝就是,两个变量的内存地址不同,互不影响。

深拷贝和浅拷贝都是对象的拷贝,都会生成一个看起来相同的对象,他们本质的区别是拷贝出来的对象的地址是否和原对象一样,也就是地址的复制还是值的复制的区别。

分析一下=、copy()、deepcoy()=:引用关系

copy():浅拷贝,只拷贝父对象,不会拷贝对象的内部的子对象。

deepcopy():深拷贝 拷贝对象及其子对象

请看下边的代码及解释:

import copy

origin = [1, 2, [3, 4]]

cop1 = origin

cop2 = copy.copy(origin) #copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。

cop3 = copy.deepcopy(origin) #copy.deepcopy 深拷贝 拷贝对象及其子对象

origin[2][0] = "hey!"

origin[0] = "hey!"

print("原来的值:",origin)

print("引用值:",cop1)

print("浅拷贝:",cop2)

print("深拷贝:",cop3)

print("************************")

print("初始对象地址",id(origin[0]))

print("引用的对象地址",id(cop1[0]))

print("浅拷贝对象地址",id(cop2[0]))

print("深拷贝对象地址",id(cop3[0])) #这里一样是因为偷懒

print("************************")

print("初始对象地址",id(origin[2][0]))

print("引用的子对象地址",id(cop1[2][0]))

print("浅拷贝子对象地址",id(cop2[2][0]))

print("深拷贝子对象地址",id(cop3[2][0]))

最后的结果为:

原来的值: ['hey!', 2, ['hey!', 4]]

引用值: ['hey!', 2, ['hey!', 4]]

浅拷贝: [1, 2, ['hey!', 4]]

深拷贝: [1, 2, [3, 4]]

************************

初始对象地址 2522241990256

引用的对象地址 2522241990256

浅拷贝对象地址 140704878993808

深拷贝对象地址 140704878993808 #这里的地址一样是因为偷懒,你修改这个cop2的值,不会影响cop3

************************

初始对象地址 2522241989360

引用的子对象地址 2522241989360

浅拷贝子对象地址 2522241989360

深拷贝子对象地址 140704878993872

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值