本文实例讲述了Python深拷贝与浅拷贝用法。分享给大家供大家参考,具体如下:
1、对象的赋值
对象的赋值实际上是对象之间的引用:当创建一个对象,然后将这个对象赋值给另外一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用。
当对对象做赋值或者是参数传递或者作为返回值的时候,总是传递原始对象的引用,而不是一个副本。如下所示:
在python中将一个变量赋值给另一个变量,传递的是引用.无论是a的内层变化还是外层变化,b都会发生同样的变化.因为b和a指向了同一个引用.类似于c语言中的同一片内存地址.
#coding=utf-8a = [1,2,3,['a','b','c']]b = aprint('*'*50)print('--- b = a ---')print('a = %s'%a)print('b = %s'%b)a.append(4)print('--- 外层a增加了元素4 ---')print('a = %s'%a)print('b = %s'%b)print('--- 内层增加了元素"d" ---')a[3].append('d')print('a = %s'%a)print('b = %s'%b)
运行结果:
**************************************************
--- b = a ---
a = [1, 2, 3, ['a', 'b', 'c']]
b = [1, 2, 3, ['a', 'b', 'c']]
--- 外层a增加了元素4 ---
a = [1, 2, 3, ['a', 'b', 'c'], 4]
b = [1, 2, 3, ['a', 'b', 'c'], 4]
--- 内层增加了元素'd' ---
a = [1, 2, 3, ['a', 'b', 'c', 'd'], 4]
b = [1, 2, 3, ['a', 'b', 'c', 'd'], 4]
2、对象的复制
当你想修改一个对象,而且让原始的对象不受影响的时候,那么就需要使用到对象的复制,对象的复制可以通过三种方法实现:
a、 使用切片操作进行拷贝 - -slice operation
(注:切片技术应用于所有的序列,包括:列表、字符串、元祖 ,但切片不能应用于字典。对字典只能使用D.copy()
方法或D.deepcopy()
方法.)
b、 使用工厂函数进行拷贝,list / dir / set - -factoryfunction
c、 copy.copy()