通俗的理解,淺就是外面,深就是里面。淺拷貝的意思就是只拷貝外面的一層,深拷貝就是拷貝的里面的所有。
看兩段代碼:
元組:
#!/usr/bin/env/python # -*-coding:utf-8-*- # authour:xiapmin_pei import copy #定義一個元組,元組里面有一個列表,可以理解成內部 atuple=(1,2,3,[4,5]) #將元組賦值給b b = atuple #淺拷貝 c = copy.copy(atuple) #深拷貝 d = copy.deepcopy(atuple) #打印每個對象的值 print "b is {0},c is {1},d is {2}".format(b,c,d) #改變atuple里面內嵌的列表,給列表增加一個6 atuple[3].append(6) print "b is {0},c is {1},d is {2}".format(b,c,d)
結果:可以看出來,將atuple賦值給b,b和atuple始終是一致的
淺拷貝外面一層不會變,但是嵌套的列表會改變
深拷貝只和atuple的原始一樣,不會隨着atuple的改變而改變
b is (1, 2, 3, [4, 5]), c is (1, 2, 3, [4, 5]), d is (1, 2, 3, [4, 5])
b is (1, 2, 3, [4, 5, 6]), c is (1, 2, 3, [4, 5, 6]), d is (1, 2, 3, [4, 5])
列表:
#!/usr/bin/env/python # -*-coding:utf-8-*- # authour:xiapmin_pei import copy alist = [1,2,3,[4,5]] b = alist c = copy.copy(alist) d = copy.deepcopy(alist) print "alist是{0},b是{1}, c是{2}, d是{3}".format(alist,b,c,d) alist[3].append(6) print "alist是{0},b是{1}, c是{2}, d是{3}".format(alist,b,c,d) alist.append(7) print "alist是{0},b是{1}, c是{2}, d是{3}".format(alist,b,c,d)
結果:可以看出來,將alist賦值給b,b無論怎么變化,都是和alist是一樣的
淺拷貝copy只拷貝第一層,第一層不改變,但是嵌套的列表隨着alist的改變而改變
深拷貝deepcopy只和原先的alist是一致的,無論alist怎么改變,deepcopy只拷貝一次原先的。
alist是[1, 2, 3, [4, 5]],b是[1, 2, 3, [4, 5]], c是[1, 2, 3, [4, 5]], d是[1, 2, 3, [4, 5]]
alist是[1, 2, 3, [4, 5, 6]],b是[1, 2, 3, [4, 5, 6]], c是[1, 2, 3, [4, 5, 6]], d是[1, 2, 3, [4, 5]]
alist是[1, 2, 3, [4, 5, 6], 7],b是[1, 2, 3, [4, 5, 6], 7], c是[1, 2, 3, [4, 5, 6]], d是[1, 2, 3, [4, 5]]