python中的复制与拷贝

版权声明:转载时须注明出处 https://blog.csdn.net/KID_yuan/article/details/83986937

python中的复制分为深拷贝和浅拷贝,适用于python中的任何组合对象

赋值:简单拷贝对象的引用,两个对象的id相同。

深拷贝:能够拷贝对象内部所有数据和引用,两个对象的id不同,引用相当于C语言中的指针概念,但python中不存在指针,但是变量的内存结构是通过引用来维护的。

浅拷贝:并不复制对象内部的所有引用,只复制所有数据,两个对象id不同。

说明:

深拷贝和浅拷贝的不同仅仅是对于组合对象而言的,所谓的组合对象就是包含了其他对象的对象,例如,列表,元组,字典,类实例等又包含了这些数据类型。对于数字,字符串,以及其他“原子”类型,例如,列表中只包含数字或者字符串等,没有深浅拷贝一说。

常见的浅拷贝有:切片操作,工厂函数(list,str,tuple),对象的copy()方法,copy模块中的copy函数。

可使用copy模块来实现组合对象的深拷贝{------deepcopy()------}和浅拷贝{------copy()------}。

举例说明:

#python中的复制与拷贝
#原子类型
#赋值
L1=[1,2,3,4,5]
L2=L1
print(id(L1),id(L2))
L2[0]='a'
print(L1,L2)

输出结果如下:

#copy
L3=L1.copy()
print(id(L1),id(L3))
L3[0]='b'
print(L1,L3)

输出:

扫描二维码关注公众号,回复: 4514605 查看本文章
#遍历赋值
L4=L1[:]
print(id(L1),id(L4))
L4[0]='c'
print(L1,L4)

输出:

#deepcopy与copy
import copy
L5=copy.copy(L1)
print(id(L1),id(L5))
L5[0]='d'
print(L1,L5)

输出:

L6=copy.deepcopy(L1)
print(id(L1),id(L6))
L6[0]='e'
print(L1,L6)

输出:

#组合类型
import copy
d={'a':'apple','b':{'g':'grape','o':'orange'}}
print('d:---',d,'\n')

dict1=copy.deepcopy(d)#深拷贝
dict2=copy.copy(d)#浅拷贝

dict1['b']['g']='banana'
print('dict1:',dict1)
print('d:---',d,'\n')

dict2['b']['g']='banana'
print('dict2:',dict2)
print('d:---',d,'\n')

输出:

字典dict1深拷贝字典d中的数据,即使dict1数据改变,也不会影响d。

字典dict2浅拷贝字典d中的数据,若字典dict2数据发生增添删改等操作,字典d中的数据也会发生改变。

猜你喜欢

转载自blog.csdn.net/KID_yuan/article/details/83986937
今日推荐