当前位置: > python问答 >

python深拷贝deepcopy和浅拷贝copy区别
栏目分类:python问答   发布日期:2019年06月01日 16:30:20   浏览次数:

深拷贝:拷贝所有对象,包括顶级对象以及嵌套对象,所以原始对象的改变不会造成深拷贝里任何子元素的改变 ,注意使用浅拷贝或深拷贝需要import copy。浅拷贝的语句为b=copy.copy(a),浅拷贝的原理是在内存中新建一个a的副本,然后将b指向这个副本
 
浅拷贝:只拷贝顶级对象, 没有拷贝嵌套对象,所以原始数据改变,嵌套对象会改变,也就是说深拷贝是对原对象深层次的复制,不仅会复制对象本身,也会复制其中的子对象。深拷贝得到的对象与原对象存在于内存中不同的两个区域,两者之前是完全独立的。深拷贝的语句是b=copy.deepcopy(a)


可能你还不是很明白,没关系,来看一个案例


import copy
a = [1,2,3,4,[5,6,7,9,10]]   #第4个位置是一个列表
b = a
print('a 的 di:%s,b 的 id:%s'%(id(a),id(b)))    #这个时候a和b的id是一样的

c = copy.copy(a)    #浅拷贝的语句为copy,
print("c的内存地址",id(c))        #看下c和a的内存地址是否一样?发现一样的

d = copy.deepcopy(a)     #深拷贝d
print("d的内存地址",id(d))      #看下d和a的内存地址是否一样?发现不一样

#修改一下a的值
a.append(8)    #会在下标5个位置填写一个8,也就是第6个位置
a[4].append(9)   #修改第4个位置的列表添加一个9
#在来看下abcd的值
print(a)
print(b)
print(c)
print(d)

运行结果如下:

a 的 di:51733888,b 的 id:51733888
c的内存地址 51734768
d的内存地址 52264752
[1, 2, 3, 4, [5, 6, 7, 9, 10, 9], 8]
[1, 2, 3, 4, [5, 6, 7, 9, 10, 9], 8]
[1, 2, 3, 4, [5, 6, 7, 9, 10, 9]]
[1, 2, 3, 4, [5, 6, 7, 9, 10]]
说明,不管是浅拷贝还是深拷贝,都是复制的一份,内存地址不一样,若是修改,浅拷贝会关联第二次的数据, 深拷贝就是完完全全复制了一份,且数据不会互相影响,因为内存不共享,在怎么修改也不受影响。

相关热词:

热门关键词
python字符串
     
python教程 python爬虫 python人工智能 Python+大数据 python问答