在Python中,无论是对象赋值,作为为参数传递,作为函数返回值,都是引用传递的.如果需要拷贝对象,需要使用标准库中的copy模块(import copy)。
1.浅拷贝 :
使用copy.copy,它可以进行对象的浅拷贝(shallow copy),它复制了对象,但对于对象中的元素,依然使用引用(换句话说修改拷贝对象元素,则被拷贝对象元素也被修改)
2.深拷贝 :
使用copy.deepcopy,它可以进行深拷贝,不仅拷贝了对象,同时也拷贝了对象中的元素,获得了全新的对象,与被拷贝对象完全独立,但这需要牺牲一定的时间和空间。
3.特殊拷贝:
如要复制列表L,使用list(L),要复制一个字典d,使用dict(d),要复制一个集合s,使用set(s)。
总结一下的话:如果你要复制某个对象object, 它属于python内建的类型type,那么你可以使用type(object)来 获得一个拷贝。
4 举例:
import copy
list = [1, 2, 3, 4, ['a', 'b']] #原始对象
b = list #赋值,传对象的引用,依然指向list
c = copy.copy(list) #对象拷贝,浅拷贝(元素依然是共享的引用)
d = copy.deepcopy(list) #对象拷贝,深拷贝
list.append(5) #修改对象list
list[4].append('c') #修改对象list中的['a', 'b']数组对象
print 'list = ', list
print 'b = ', b
print 'c = ', c
print 'd = ', d
输出结果:
list = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
b = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
c = [1, 2, 3, 4, ['a', 'b', 'c']]
d = [1, 2, 3, 4, ['a', 'b']]