Python中的對象之間賦值時是按引用傳遞的,若是須要拷貝對象,須要使用標準庫中的copy模塊。
1. copy.copy 淺拷貝 只拷貝父對象,不會拷貝對象的內部的子對象。
2. copy.deepcopy 深拷貝 拷貝對象及其子對象 數組
看下面的一個實例app
import copy init = [1, 2, 3, 4, ['a', 'b']] #原始對象 assign = init #賦值,傳對象的引用
cp = copy.copy(init) #對象拷貝,淺拷貝
dcp = copy.deepcopy(init) #對象拷貝,深拷貝
assign.append(5) #修改對象a
assign[4].append('c') #修改對象a中的['a', 'b']數組對象
print 'init = ', init print 'assign = ', assign print 'cp = ', cp print 'dcp = ', dcp
init = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
assign = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
cp = [1, 2, 3, 4, ['a', 'b', 'c']]
dcp = [1, 2, 3, 4, ['a', 'b']]
如今,讓咱們看下這些對象的內存地址:spa
print 'init id: ',id(init),'------', 'init[4] id:', id(init[4]) print 'assign id: ', id(assign),'------', 'assign[4] id: ',id(assign[4]) print 'cp id: ', id(cp),'------', 'cp[4] id: ',id(cp[4]) print 'dcp id: ', id(dcp),'------', 'dcp[4] id: ',id(dcp[4])
init id: 64393032 ------ init[4] id: 64392648
assign id: 64393032 ------ assign[4] id: 64392648
cp id: 64433544 ------ cp[4] id: 64392648
dcp id: 65395784 ------ dcp[4] id: 64392968
reference.net