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写程序简直是享受)