1127正則表達(dá)式與內(nèi)存管理
-
內(nèi)存管理:內(nèi)存分為棧區(qū)間和堆區(qū)間橱乱,棧區(qū)間的內(nèi)存是系統(tǒng)自動(dòng)申請(qǐng)釋放弟塞;堆上的內(nèi)存需要程序通過調(diào)用malloc函數(shù)去申請(qǐng)稿械,通過調(diào)用free函數(shù)去釋放膜廊;
高級(jí)語言(java乏沸、C++、0C爪瓜、Python)中內(nèi)存管理機(jī)制蹬跃,都是針對(duì)堆上的內(nèi)存的管理進(jìn)行自動(dòng)化操作
-
Python內(nèi)存管理機(jī)制:
1)內(nèi)存申請(qǐng):Python中所有數(shù)據(jù)都是存于堆中;變量與函數(shù)調(diào)用過程壓棧存于棧中铆铆,變量中保存堆中數(shù)據(jù)的地址蝶缀;如果使用數(shù)字和字符串給變量賦值丹喻,會(huì)先檢查內(nèi)存是否有這個(gè)數(shù)據(jù),如果有會(huì)直接將原來的數(shù)據(jù)地址賦予變量翁都;除了字符串和數(shù)字以外碍论,別的數(shù)據(jù)重新賦值會(huì)賦予新的地址
2)內(nèi)存釋放(垃圾回收機(jī)制):在Python中,一個(gè)數(shù)據(jù)對(duì)應(yīng)的內(nèi)存空間是否釋放荐吵,取決于這個(gè)數(shù)據(jù)的引用計(jì)數(shù)是否為0骑冗,如果為0就會(huì)被釋放
a. 增加引用計(jì)數(shù):增加數(shù)據(jù)的引用
b. 減少引用計(jì)數(shù):刪除引用赊瞬,或者讓引用去保存新的數(shù)據(jù)
c. 循環(huán)引用:Python垃圾回收機(jī)制會(huì)自動(dòng)處理循環(huán)引用問題
-
拷貝:
1)淺拷貝copy:復(fù)制原數(shù)據(jù)先煎,外層拷貝,返回一個(gè)新地址巧涧,內(nèi)層可變數(shù)據(jù)類型不會(huì)拷貝
2)深拷貝deepcopy:淺拷貝基礎(chǔ)上薯蝎,遞歸拷貝,內(nèi)層可變數(shù)據(jù)類型也會(huì)拷貝獲得新地址
-
正則表達(dá)式:re模塊谤绳;主要解決生活中字符串匹配問題
1)用正則符號(hào)來描述字符串規(guī)則占锯,使字符串匹配更簡單的一種工具;幾乎所有的編程語言都支持正則
2)正則符號(hào)之匹配符號(hào):
? a. 普通字符:在正則表達(dá)式中沒有特殊意義的字符
? b. ‘.’:代表一個(gè)任意字符
? c. ‘\d’:匹配任意一個(gè)數(shù)字字符缩筛,‘\D’:與小寫相反
? d. ‘\s’:匹配任意一個(gè)空白字符消略,‘\S’:與小寫相反
? e. [字符集]:匹配字符集中的任意一個(gè)字符,一個(gè)[]只能匹配一個(gè)字符
? f. [字符1-字符2]:匹配任意一個(gè)字符1到字符2之間的字符
? g. [ ^字符集]:匹配除了字符集以外的任意一個(gè)字符
3)正則符號(hào)之檢測(cè)符號(hào):只檢查不匹配
? a. ‘\b’:檢測(cè)是否是單詞邊界
? b. ‘^‘:檢測(cè)字符開頭
? c. ’$‘:檢測(cè)字符串結(jié)尾
4)匹配次數(shù):
? a. ’?‘:匹配0次或1次
? b. '*':匹配任意次數(shù)
? c. ’+‘:匹配1次或多次
? d. {N}:匹配N次
? e. {M,N}:匹配M到N次
? f. {M,}:匹配至少M(fèi)次
? g. {,N}:匹配最多N次
5)貪婪與非貪婪:匹配次數(shù)不確定時(shí)有貪婪和非貪婪兩種狀態(tài)
? a. 默認(rèn)是貪婪:在匹配成功的前提下瞎抛,盡可能多的匹配
? b. 非貪婪:在貪婪符號(hào)后添加’?‘艺演,在匹配成功的前提下,盡可能少的匹配
6)分支和分組:
? a. 分支|:正則1|正則2桐臊,|相當(dāng)于或的意思胎撤,先讓正則1匹配,只有一個(gè)匹配成功就成功
? b. 分組():把()當(dāng)成一個(gè)整體断凶,例如:(正則表達(dá)式)匹配次數(shù)-- 整體控制次數(shù)
? c. 重復(fù):()字符\n伤提,表示重復(fù)n次()內(nèi)的內(nèi)容