在Python中對(duì)象的賦值其實(shí)就是對(duì)象的引用轮蜕。當(dāng)創(chuàng)建一個(gè)對(duì)象举瑰,把它賦值給另一個(gè)變量的時(shí)候四濒,python并沒(méi)有拷貝這個(gè)對(duì)象,只是拷貝了這個(gè)對(duì)象的引用而已欠气。
淺拷貝:拷貝了最外圍的對(duì)象本身厅各,內(nèi)部的元素都只是拷貝了一個(gè)引用而已。也就是预柒,把對(duì)象復(fù)制一遍队塘,但是該對(duì)象中引用的其他對(duì)象我不復(fù)制
深拷貝:外圍和內(nèi)部元素都進(jìn)行了拷貝對(duì)象本身,而不是引用宜鸯。也就是憔古,把對(duì)象復(fù)制一遍,并且該對(duì)象中引用的其他對(duì)象我也復(fù)制淋袖。
1鸿市,變量:是一個(gè)系統(tǒng)表的元素,擁有指向?qū)ο蟮倪B接空間?
2即碗,對(duì)象:被分配的一塊內(nèi)存焰情,存儲(chǔ)其所代表的值?
3,引用:是自動(dòng)形成的從變量到對(duì)象的指針?
4剥懒,注意:類型(int類型内舟,long類型(python3已去除long類型,只剩下int類型的數(shù)據(jù)))屬于對(duì)象初橘,不是變量?
5验游,不可變對(duì)象:一旦創(chuàng)建就不可修改的對(duì)象,包括字符串壁却、元組、數(shù)字?
6裸准,可變對(duì)象:可以修改的對(duì)象展东,包括列表、字典炒俱。
應(yīng)用的范圍:
1盐肃,減少內(nèi)存的使用 ????
2爪膊,以后在做數(shù)據(jù)的清洗、修改或者入庫(kù)的時(shí)候砸王,對(duì)原數(shù)據(jù)進(jìn)行復(fù)制一份推盛,以防數(shù)據(jù)修改之后,找不到原數(shù)據(jù)
對(duì)于不可變對(duì)象的深淺拷貝:
不可變對(duì)象類型谦铃,沒(méi)有被拷貝的說(shuō)法耘成,即便是用深拷貝,查看id的話也是一樣的驹闰,如果對(duì)其重新賦值瘪菌,也只是新創(chuàng)建一個(gè)對(duì)象,替換掉舊的而已嘹朗。
一句話就是师妙,不可變類型,不管是深拷貝還是淺拷貝屹培,地址值和拷貝后的值都是一樣的默穴。
對(duì)于可變對(duì)象深淺拷貝:
=淺拷貝:值相等,地址相等?
copy淺拷貝:值相等褪秀,地址不相等?
deepcopy深拷貝:值相等蓄诽,地址不相等
總結(jié)
1,深淺拷貝都是對(duì)源對(duì)象的復(fù)制溜歪,占用不同的內(nèi)存空間若专。
2,不可變類型的對(duì)象蝴猪,對(duì)于深淺拷貝毫無(wú)影響调衰,最終的地址值和值都是相等的。
3自阱,可變類型:?
=淺拷貝: 值相等嚎莉,地址相等?
copy淺拷貝:值相等,地址不相等?
deepcopy深拷貝:值相等沛豌,地址不相等