- 直接指派:其實就是對象的引用(别名)。
- 淺拷貝(copy):拷貝父對象,不會拷貝對象内部的子對象。或者說是,隻拷貝對象自身,内部元素引用的其他對象隻拷貝一個引用。
- 深拷貝(deepcopy): copy 子產品的 deepcopy 方法,完全拷貝了父對象及其子對象。是以拷貝産生的副本可以随意修改,而不用擔心會影響原始值。
1、b = a: 指派引用,a 和 b 都指向同一個對象。
2、b = a.copy(): 淺拷貝, a 和 b 是一個獨立的對象,但他們的子對象還是指向統一對象(是引用)。
b = copy.deepcopy(a): 深度拷貝, a 和 b 完全拷貝了父對象及其子對象,兩者是完全獨立的。
執行個體
以下執行個體是使用 copy 子產品的 copy.copy( 淺拷貝 )和copy.deepcopy (深拷貝)
#!/usr/bin/python3
'''
Created on 2019年5月6日
@author: Administrator
'''
import copy
def cli():
print("start...")
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)
if __name__ == '__main__':
cli()
執行結果:
start...
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']]