python 中的深拷贝和浅拷贝

 

要想明白什么是深拷贝什么是浅拷贝,那么就要明白是什么是可变对象什么是不可变对象。

什么是可变对象,什么是不可变对象:

可变对象是指:一个对象在不改变其所指向的地址的前提下,可以修改其所指向的地址中的值;(地址不变,值可变)

不可变对象是指:一个对象所指向的地址上值是不能修改的,如果你修改了这个对象的值,那么它指向的地址就改变了,相当于你把这个对象指向的值复制出来一份,然后做了修改后存到另一个地址上了,但是可变对象就不会做这样的动作,而是直接在对象所指的地址上把值给改变了,而这个对象依然指向这个地址。(地址变了,改变copy对象,我自己不变)

什么是深拷贝,什么是浅拷贝:

浅拷贝:能够拷贝a中的父对象,不会拷贝子对象,也不拷贝id;那么a的父子对象都改变 c中的父对象不变,但是子对象会变

深拷贝:拷贝的就是a的值,也不拷贝id;那么a的父子对象改变了,d是不会变的。

举个例子:

#!/usr/bin/python
# -*-coding:utf-8 -*-

import copy

a = [1,2,3,4,['a','b']] #原始对象

b = a            #赋值,传对象的引用     

c = copy.copy(a) #对象拷贝,浅拷贝
d = copy.deepcopy(a) #对象拷贝 ,深拷贝
print 'a:',a,'<a_id>',id(a)
print 'b:',b,'<b_id>',id(b)
print 'c:',c,'<c_id>',id(c)
print 'd:',d,'<d_id>',id(d)
print '___________________________________'
a.append(5) #父对象改变
a[4].append('c')#子对象改变
print 'a:',a,'<a_id>',id(a)
print 'b:',b,'<B_id>',id(b)
print 'c:',c,'<c_id>',id(c)
print 'd:',d,'<d_id>',id(d)

"""a = b 那么就是b指向的就是a的地址和值
c=copy.copy(a)那么就是浅拷贝,能够拷贝a中的父对象,不会拷贝子对象,也不拷贝id
那么a的父子对象都改变 c中的父对象不变,但是子对象会变
d= copy.deepcopy(a) 是深拷贝,拷贝的就是a的值,也不拷贝id
那么a的父子对象改变了,d是不会变的。"""

输出结果:

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值