2019-08-12 day-16總結

內(nèi)存管理和拷貝

一.多繼承

python中的類支持多繼承(讓一個類同時繼承多個類)

多繼承的時候,子類只能繼承第一個父類所有的屬性和方法,后面的子類只有字段和方法可以繼承

二.運算符重載

1.運算符

python中所有的類型都是類,所以所有的數(shù)據(jù)都是對象
python中使用任意的運算符都是在調用相應類中的相應方法,每一個運算符對應什么方法是固定的
某種數(shù)據(jù)是否支持某個運算符操作就看這個數(shù)據(jù)類型中是否實現(xiàn)了對應的方法

2.運算符重載指的是在不同的類中實現(xiàn)同樣的運算符對應的函數(shù)

類的對象默認情況下只支持 == , != , > , < (均為地址比較)

self:當前類的對象,也是+前面的那個數(shù)據(jù)
other:+后面的數(shù)據(jù),類型根據(jù)運算規(guī)則的設計可以是任意類型的數(shù)據(jù)

def __add__(self, other):
    return 'abc'

注意:大于號和小于號只需要重載一個,另一個自動取反(這建立于比較相同的屬性)

三.淺拷貝和深拷貝

1.直接賦值

將變量中的地址直接賦給新的變量;賦值后兩個變量的地址相同

2.拷貝

不管是淺拷貝還是深拷貝都會被原數(shù)據(jù)進行賦值產(chǎn)生新的地址

3.淺拷貝

字符串、列表和元祖的切片;對象.copy();以及copy模塊中的copy方法都是淺拷貝
淺拷貝指拷貝當前對象,不會被子對象進行拷貝

4.深拷貝

copy模塊中的deepcopy方法是深拷貝

四.枚舉

from enum import Enum,unique

枚舉值的特點:
1.可以通過有意義的屬性名直接顯示數(shù)據(jù)
2.每個數(shù)據(jù)的值不能修改
3.可以做到不同的數(shù)據(jù)的值唯一

@unique    # 令枚舉值唯一
class PokerEnum(Enum):
    J = 11
    Q = 12
    K = 13
    A = 1

print(str(PokerEnum.J)[-1])
print(PokerEnum.J.value)

五.內(nèi)存管理

1.內(nèi)存的開辟

內(nèi)存區(qū)間分為棧區(qū)間和堆區(qū)間,棧區(qū)間的內(nèi)存自動開辟自動釋放,堆區(qū)間的內(nèi)存需要程序員手動開辟、手動釋放。
但是python已經(jīng)將堆區(qū)間內(nèi)存的開辟和釋放自動化

當給變量賦值的時候,系統(tǒng)會先在堆區(qū)間中開辟空間,將數(shù)據(jù)存起來,然后再將數(shù)據(jù)在堆中的地址存到變量中,變量存在棧區(qū)間.
數(shù)字和字符串數(shù)據(jù)在開辟空間的時候,會先檢測內(nèi)存中之前是否有這個數(shù)據(jù),如果有,就直接使用之前的數(shù)據(jù),沒有才直接開辟空間保存

2.內(nèi)存的釋放

棧區(qū)間:全局棧區(qū)間在程序結束后銷毀,函數(shù)棧區(qū)間在函數(shù)調用結束后銷毀(自動)
堆區(qū)間:看一個對象是否銷毀,就看這個對象的引用計數(shù)是否為0,如果一個對象的引用計數(shù)為0,這個對象就會銷毀

注意:python中針對對象的循環(huán)引用已經(jīng)做了處理,程序員不需要寫額外的代碼來解決循環(huán)引用問題

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容