天天看點

Python天天美味(22) - 拷貝對象(深拷貝deepcopy與淺拷貝copy)

Python中的對象之間指派時是按引用傳遞的,如果需要拷貝對象,需要使用标準庫中的copy子產品。

1. copy.copy 淺拷貝 隻拷貝父對象,不會拷貝對象的内部的子對象。

2. copy.deepcopy 深拷貝 拷貝對象及其子對象

一個很好的例子:

Python天天美味(22) - 拷貝對象(深拷貝deepcopy與淺拷貝copy)

import copy

Python天天美味(22) - 拷貝對象(深拷貝deepcopy與淺拷貝copy)

a = [1, 2, 3, 4, ['a', 'b']]  #原始對象

Python天天美味(22) - 拷貝對象(深拷貝deepcopy與淺拷貝copy)
Python天天美味(22) - 拷貝對象(深拷貝deepcopy與淺拷貝copy)

b = a  #指派,傳對象的引用

Python天天美味(22) - 拷貝對象(深拷貝deepcopy與淺拷貝copy)

c = copy.copy(a)  #對象拷貝,淺拷貝

Python天天美味(22) - 拷貝對象(深拷貝deepcopy與淺拷貝copy)

d = copy.deepcopy(a)  #對象拷貝,深拷貝

Python天天美味(22) - 拷貝對象(深拷貝deepcopy與淺拷貝copy)
Python天天美味(22) - 拷貝對象(深拷貝deepcopy與淺拷貝copy)

a.append(5)  #修改對象a

Python天天美味(22) - 拷貝對象(深拷貝deepcopy與淺拷貝copy)

a[4].append('c')  #修改對象a中的['a', 'b']數組對象

Python天天美味(22) - 拷貝對象(深拷貝deepcopy與淺拷貝copy)
Python天天美味(22) - 拷貝對象(深拷貝deepcopy與淺拷貝copy)

print 'a = ', a

Python天天美味(22) - 拷貝對象(深拷貝deepcopy與淺拷貝copy)

print 'b = ', b

Python天天美味(22) - 拷貝對象(深拷貝deepcopy與淺拷貝copy)

print 'c = ', c

Python天天美味(22) - 拷貝對象(深拷貝deepcopy與淺拷貝copy)

print 'd = ', d

輸出結果:

a =  [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']]

<a target="_blank" href="http://www.cnblogs.com/coderzh/archive/2008/05/17/1201509.html">Python 天天美味(23) - enumerate周遊數組</a>

...

本文轉自CoderZh部落格園部落格,原文連結:http://www.cnblogs.com/coderzh/archive/2008/05/17/1201506.html,如需轉載請自行聯系原作者