python 浅拷贝与深拷贝

1、概念

在python中对象的赋值其实就是对象的引用,当创建一个对象,把它赋值给另一个变量的时候,python并没有拷贝这个对象,而是拷贝了这个对象的引用而已。

浅拷贝

拷贝了最外围的对象本身,内部的元素都只是拷贝了一个引用而已,也就是把对象赋值一遍,但是该对象引用的其他对象不复制。

深拷贝

外围和内部元素都进行了拷贝对象本身,而不是引用,也就是把对象赋值一遍,并且该对象中引用的其他对象我也复制。

2、深浅拷贝的作用

1、减少内存的使用
2、以后在做数据的清洗,修改或者入库的时候对原数据进行复制一份,以防数据修改后,找不到原数据。

3、浅拷贝

copy浅拷贝,没有拷贝子对象,所以原始数据改变,子对象也会改变

# coding:utf8
import copy
a=[1,2,3,[]]
c = copy.copy(a)
print a
print c
#没有修改子对象
a.append(4)
print a
print c
#修改子对象
a[3].append(5)
print a
print c

输出结果为

[1, 2, 3, []]
[1, 2, 3, []]
[1, 2, 3, [], 4]
[1, 2, 3, []]
#原始数据的子对象变了,新数据的子对象也变了。
[1, 2, 3, [5], 4]
[1, 2, 3, [5]]

4、深拷贝

深拷贝,包含对象里边的自对象的拷贝,所以原始对象的改变不会造成深浅拷贝里任何子元素的改变

# coding:utf8
import copy
a=[1,2,3,[]]
d = copy.deepcopy(a)
print 'a:',a
print "d:",d
a.append(4)
print "a:",a
print "d:",d
a[3].append(5)
print "a:",a
print "d:",d

输出结果:

a: [1, 2, 3, []]
d: [1, 2, 3, []]
a: [1, 2, 3, [], 4]
d: [1, 2, 3, []]
a: [1, 2, 3, [5], 4]
d: [1, 2, 3, []]

发现d 一直没有改变

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值