深浅拷贝的区别

#深浅拷贝
#copy.copy()浅拷贝 copy.deepcopy()深拷贝
import copy
a=[1,2,3,4,[3,4,5]]
b=a
c=copy.deepcopy(a)
d=copy.copy(a)
print(id(a)) #1886787591496
print(id(b)) #1886787591496
print(id©) #1886787591368
print(id(d)) #1886787581768

a.append(6)
print(a) #[1, 2, 3, 4, [3, 4, 5], 6]
print(b) #[1, 2, 3, 4, [3, 4, 5], 6]
print© #[1, 2, 3, 4, [3, 4, 5]] 深拷贝
print(d) #[1, 2, 3, 4, [3, 4, 5]] 浅拷贝

a[4].append(7)
print(a) #[1, 2, 3, 4, [3, 4, 5, 7], 6]
print(b) #[1, 2, 3, 4, [3, 4, 5, 7], 6]
print© #[1, 2, 3, 4, [3, 4, 5]] 深拷贝
print(d) #[1, 2, 3, 4, [3, 4, 5, 7]] 浅拷贝

#从以上例子中可以看到,在电脑id存储方面,当用等号给一个变量重新赋值以后,那个前后两个变量的电脑id存储地址是一样的,
#如果深浅拷贝后,即使变量下的内容完全一样,但是在电脑中存储的地址是不一样的

#原始变量列表中,列表中套列表,最里层列中的元素叫子对象,外边的叫父对象
#如果给原始变量列表添加一个元素,不管是深拷贝还是浅拷贝,都不会跟随添加新的元素
#如果给最里层列表中添加子对象元素,深拷贝仍然不会跟随添加新的元素,但是浅拷贝会跟随添加
#所以可以说,深拷贝叫完全拷贝,浅拷贝是不完全拷贝,如果原始列表中的子元素增加子对象,浅拷贝会跟着变化的

#如果原始变量列表中更改一个子元素,深浅拷贝后不会跟着改变
import copy
a=[1,2,3,[4,5],6]
b=copy.copy(a)
c=copy.deepcopy(a)
a[2]=8
print(b) #[1, 2, 3, [4, 5], 6]
print© #[1, 2, 3, [4, 5], 6]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值