總目錄:http://www.reibang.com/p/e406a9bc93a9
Python - 子目錄:http://www.reibang.com/p/50b432cb9460
直接賦值和深淺拷貝
直接賦值:并不會產(chǎn)生一個獨立的對象單獨存在,他只是將原有的數(shù)據(jù)塊打上一個新標(biāo)簽,所以當(dāng)其中一個標(biāo)簽被改變的時候件相,數(shù)據(jù)塊就會發(fā)生變化箱蝠,另一個標(biāo)簽也會隨之改變驰怎。
淺拷貝:淺拷貝分為兩種情況吃粒,第一種情況拷貝對象無復(fù)雜子對象巧娱, 原來值的改變并不會影響淺拷貝的值闺金,同時淺拷貝的值改變也并不會影響原來的值逾滥。原來值的id值與淺拷貝原來的值不同。
第二種情況拷貝對象有復(fù)雜子對象败匹,則引用拷貝對象內(nèi)復(fù)雜子對象寨昙,拷貝對象內(nèi)復(fù)雜子對象的值發(fā)生變化時,淺拷貝中復(fù)雜子對象的值發(fā)生相應(yīng)更改掀亩。
深拷貝:即將被拷貝對象完全再拷貝一遍作為獨立的新個體單獨存在舔哪。所以改變原有被拷貝對象不會對已經(jīng)拷貝出來的新對象產(chǎn)生影響。
實例
#!/usr/bin/python
# -*-coding:utf-8 -*-
import copy
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']數(shù)組對象
d.append(6)? ? ? ? ? ? ? ? ? ? ?#修改對象d
print('a =',a)
print('b =',b)
print('c =',c)
print('d =',d)
('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,6,['a','b']])