浅拷贝(copy):不拷贝对象的内容,仅仅拷贝子对象的引用;
深拷贝(deepcopy):会连同拷贝子对象的内存,对子对象的修改不会影响源对象;
下面用代码来测试:
import copy
def test_copy():
'''浅拷贝测试'''
a = [10, 20, [5, 6]]
b = copy.copy(a)
print("a:",a,end="\t")
print("b:",b)
b.append(30)
b[2].append(7)
print("浅拷贝--->",end="\t")
print("a:",a,end="\t")
print("b:",b)
def test_deepcopy():
'''深拷贝测试'''
a = [10, 20, [5, 6]]
c = copy.deepcopy(a)
print("a:",a,end="\t")
print("c:",c)
c.append(30)
c[2].append(7)
print("深拷贝--->",end="\t")
print("a:",a,end="\t")
print("c:",c)
test_copy()
test_deepcopy()
运行结果:
a: [10, 20, [5, 6]] b: [10, 20, [5, 6]]
浅拷贝---> a: [10, 20, [5, 6, 7]] b: [10, 20, [5, 6, 7], 30]
a: [10, 20, [5, 6]] c: [10, 20, [5, 6]]
深拷贝---> a: [10, 20, [5, 6]] c: [10, 20, [5, 6, 7], 30]
原理图:
-
copy
-
deepcopy