淺拷貝
a = [1,2,3]
b = a # a is b 這兩個變量指向同一片內存地址
# 即如果a的值別修改了咧擂,b的值也會被修改
深拷貝
import copy
copy.deepcopy(var) # 會遞歸,將所有為地址的變量都拷貝一份。(即完全生成一份新的東西)
copy.copy(var) # 一般只拷貝一層(對于不可變類型不起作用)
-
下面的代碼copy和deepcopy沒有區(qū)別
import copy
a = [1,2,3]
b = copy.deepcopy(a)
c = copy.copy(a)
#這里 b把将、c都會產生新的地址没酣,相當于a王财、b、c是三塊內存地址
#因為列表內部不是地址裕便,copy和deepcopy只是做了一層拷貝即可
import copy
a = [1,2,3]
b = [4,5,6]
c = [a,b]
d = copy.copy(c) #這里只做了一層拷貝绒净。即開辟一塊新的地址,存放a與b變量
e = copy.deepcopy(c) #這里不光開辟一塊新的地址偿衰,因為a挂疆、b都是地址,所以同時也拷貝a下翎、b生成新的地址存在e中
print(d is e, e is c, c is d) # False False False
print(d == e, e == c, c == d) # True True True
a.append(10)
print(d == e, e == c, c == d) # False False True
# 因為后面修改了a的值缤言,c與e就不相等了,但是c與d還是相等
import copy
a = [1,2,3]
b = [4,5]
c = (a,b)
d = copy.copy(c)
e = copy.deepcopy(c)
print(d is c, e is c) # True False
b.append(6)
print(d is c, e is c) # True False
print(d is c, d[1] is c[1]) # True True
print(e[1] is c[1], e[1] == c[1], e[0] == c[0]) False False True
# 分析视事,對于元組這樣不可變類型胆萧,copy不起作用,而deepcopy還是依然強悍俐东,會逐層拷貝跌穗。