概述:
- 淺拷貝是對于一個對象的頂層拷貝,通俗的理解是:拷貝了引用,并沒有拷貝內(nèi)容,就是對要拷貝的對象復(fù)制(復(fù)制屬性和對象引用)一份,但是對于其內(nèi)部的子對象就不復(fù)制了,而是直接引用
- 深拷貝是對于一個對象所有層次的拷貝,并將其存在新開辟的空間里。
- 等號只是將該對象的引用復(fù)制一份,任何一個引用的對象發(fā)生變化,其它引用的對象也會發(fā)生變化,因此多個引用本身就是指向一個對象。
注意:is和==區(qū)別
- is是比較兩個引用是否指向了同一個對象(引用比較)
- ==是比較兩個對象是否相等
import copy
a=[1,2,3]
b=[4,5,6]
c=[300,a,b]
f=c
print(a)
print(b)
print(c)
print(f)
'''
[1, 2, 3]
[4, 5, 6]
[300, [1, 2, 3], [4, 5, 6]]
[300, [1, 2, 3], [4, 5, 6]]
'''
a.append(7)
f[0]=100
print(a)
print(c)
print(f)
print(f is c)
'''
[1, 2, 3, 7]
[100, [1, 2, 3, 7], [4, 5, 6]]
[100, [1, 2, 3, 7], [4, 5, 6]]
True
'''
#淺拷貝:拷貝對象中的元素值和對象引用
d=copy.copy(c)
#深拷貝:遞歸拷貝對象中的元素值和對象
e=copy.deepcopy(c)
b.append(8)
c[0]=500
print(c)
print(d)
print(e)
print(c is e)
print(c is d)
'''
[500, [1, 2, 3, 7], [4, 5, 6, 8]]
[100, [1, 2, 3, 7], [4, 5, 6, 8]]
[100, [1, 2, 3, 7], [4, 5, 6]]
False
False
'''