day16-內(nèi)存管理和拷貝
一、多繼承
python中的類支持多繼承
class 子類(父類1,父類2,...)
只能繼承第一個父類的對象屬性
二、運(yùn)算符的重載
1.運(yùn)算符
python中所有的數(shù)據(jù)類型本質(zhì)都是類,所有的數(shù)據(jù)本質(zhì)都是對象
在使用運(yùn)算符對數(shù)據(jù)進(jìn)行操作的時候,實質(zhì)是調(diào)用運(yùn)算符對應(yīng)的魔法方法
運(yùn)算符前面的數(shù)據(jù)類型決定了函數(shù)調(diào)用哪個類中對應(yīng)的魔法方法
每個運(yùn)算符都有自己固定的魔法方法,看某種類型的數(shù)據(jù)是否支持某種運(yùn)算符就看這個類中有沒有實現(xiàn)對應(yīng)的魔法方法。 例如:+ —— __add__
三、內(nèi)存管理
手動內(nèi)存管理:
內(nèi)存分為棧區(qū)間和堆區(qū)間,棧區(qū)間中的內(nèi)存是自動開辟和釋放;堆上的內(nèi)存需要程序員學(xué)代碼申請釋放
1.內(nèi)存的開辟
- python中所有的類型都是類,所以所有的數(shù)據(jù)都是對象,對象都是保存在堆區(qū)間,變量是保存在棧區(qū)間
- 變量中實際存儲的是堆中的數(shù)據(jù)的地址。(變量的本質(zhì)就是指針)
2.內(nèi)存的釋放
python中內(nèi)存的釋放采用的是'垃圾回收機(jī)制'自動釋放
- 垃圾回收機(jī)制:
- 1)看一個數(shù)據(jù)是否需要銷毀(是否需要回收),就看這個對象的引用計數(shù)是否為0(引用:保存對象地址的數(shù)據(jù))
- 2)如果這個對象的引用計數(shù)不為0,就假設(shè)當(dāng)前對象消失,然后看會不會有其他對象因為它的消失引起計數(shù)變量為零,如果有,就將另外一個對象也回收(循環(huán)引用解環(huán))
- 注意:用一個變量給另一個變量賦值,實質(zhì)賦的是地址
四、淺拷貝和深拷貝
使用變量的三種情況
- 直接賦值:賦的是地址,賦完值后兩個變量一模一樣
變量1 = 變量2 - 淺拷貝:直接賦值被拷貝的數(shù)據(jù)產(chǎn)生一個個新的地址,將新的地址賦給變量;如果被拷貝的對象中有子對象,子對象不會被復(fù)制
列表[:]、列表.copy()、copy.copy() - 深拷貝:直接復(fù)制被拷貝的數(shù)據(jù),產(chǎn)生一個新的地址,將新的地址賦給變量;如果被拷貝的對象中有子對象,子對象也會被復(fù)制
copy.deepcopy(數(shù)據(jù))