day16-內存管理和拷貝
一择葡、多繼承
1. 多繼承
- python中的類支持多繼承
- class 子類(父類1,父類2,...)
- 多繼承只能繼承第一個父類的對象屬性
二辨萍、運算符重載
1. 運算符
- python中所有的數(shù)據(jù)類型本質都是類,所有的數(shù)據(jù)本質都是對象
- 在使用運算符對數(shù)據(jù)進行操作的時候,實質是在調用運算符對應的魔法方法,運算符前面的數(shù)據(jù)類型,決定了函數(shù)調用哪個類中對應的魔法方法
- 每個運算符都有自己固定的魔法方法曹仗,看某種類型的數(shù)據(jù)是否支持某種運算符就看這個類型中有沒有實現(xiàn)對應的魔法方法
- 注意:>和<符號只需要重載一個,另外一個自動支持
三蠕搜、內存管理
手動內存管理
- 內存分為棧區(qū)間和堆區(qū)間怎茫,棧區(qū)間中的內存是自動開辟自動釋放的;堆里的內存需要程序員寫代碼申請和釋放
1. 內存的開辟
- python中所有的類型都是類妓灌,所以所有的數(shù)據(jù)都是對象轨蛤。對象都是保存在堆區(qū)間;變量是保存在棧區(qū)間虫埂,變量中實際保存的堆中存儲的數(shù)據(jù)的地址祥山。(變量的本質就是指針)
- 注意:除了數(shù)字和字符串對象,其他數(shù)據(jù)都是每次需要的時候直接在堆中開辟區(qū)間掉伏。數(shù)字和字符串會先檢查這個數(shù)據(jù)之前是否保存過缝呕,如果保存過就直接用之前的數(shù)據(jù)澳窑,否則才開辟新的空間。
2. 內存的釋放
- python中內存的釋放采用的是'垃圾回收機制'自動釋放
- 垃圾回收機制原理:
- 1)看一個數(shù)據(jù)是否需要銷毀(回收)供常,就看這個對象的引用計數(shù)是否為0(引用:保存對象地址的數(shù)據(jù))
- 2)如果這個對象引用計數(shù)不為0就假設當前對象消失摊聋,然后看會不會有其他對象因為它的消失引用計數(shù)變?yōu)?,如果有栈暇,就將另外一個對象也回收(循環(huán)引用釋放)
- 注意:用一個變量給另外一個變量賦值實質上賦的是地址
- ==和is的區(qū)別:==(判斷的是值是否相等)麻裁;is(判讀的是地址是否相等)
四、淺拷貝和深拷貝
1. 使用變量的3種情況
- 1)直接賦值:賦的是地址源祈,賦完值后兩個變量一模一樣
- 2)淺拷貝:列表[:]煎源、列表.copy()、copy.copy()
- 直接復制被拷貝的數(shù)據(jù)新博,產(chǎn)生一個新的地址薪夕,將新的地址賦值給變量;
- 如果被拷貝的對象有子對象赫悄,子對象不會被賦值
- 3)深拷貝:
copy.deepcopy()
- 直接復制被拷貝的數(shù)據(jù),產(chǎn)生一個新的地址馏慨,將新的地址賦值給變量埂淮;
- 如果被拷貝的對象有子對象,子對象也會被賦值