python 赋值 浅拷贝 深拷贝 与c++ 比较

时间:2022-03-11 19:48:25

python中的拷贝

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

b = a  #赋值,传对象的引用
c = copy.copy(a)  #对象拷贝,浅拷贝
d = copy.deepcopy(a)  #对象拷贝,深拷贝

a.append(5)  #修改对象a
a[4].append('c')  #修改对象a中的['a', 'b']数组对象

print 'a = ', a
print 'b = ', b
print 'c = ', c
print 'd = ', d

对于结果深入分析:

b 中的值  就是代表a  如同c++ java 中的引用(python中也是引用...)  b 是一块地址(引用即是别名) 里面装的内容就是a指向的内容 a怎么变  b就怎么变

(赋值之后就是和a同命相连了,这也是python中内存回收机制中的引用计数原理 只要还有一个引用 那么这块内存就活着)

c 是浅拷贝   拷贝的是a对象里面的值  也就是说 c是一块地址  里面装的内容和拷贝时候的a里面的值是一样的,里面的对象若变,那么都变。但是地址里面薪增加的内容和b就无关了(拷贝之后和a还有历史关系)

d 是深拷贝  这个最好理解了  重新开辟内存空间进行对象赋值(拷贝之后 和a没有任何关系,新生命)

 

结论:和c++相比,python处理的拷贝原理基本和c++一致,不同的是c++是得手动编写深拷贝函数,因为默认是浅拷贝,python则是import copy就可以

(python写程序简直是享受)