1,複習 二,記憶體管理 引用計數:垃圾回收機制的依據 引用計數會出現迴圈引用問題:相互引用無法釋放 標記清除:解決迴圈引用問題 分代回收:採用的還是引用計數來回收,是對該機制的一個優化措施 ...
1,複習
文件處理 1.操作文件的三步驟 -- 打開文件:硬碟的空間被操作系統持有 | 文件對象被應用程式持續 -- 操作文件:讀寫操作 -- 釋放文件:釋放操作系統對硬碟空間的持有 2.基礎的讀寫 with open('1.txt', 'r', encoding='utf-8') as rf, open('2.txt', 'w', encoding='utf-8') as wf: rf.read() # 一次性讀完 rf.read(10) # 讀取10個字元 rf.readline() # 一次讀一行 rf.readlines() # 將所有行讀出,存放為一個list wf.write('寫入的內容') wf.flush() # 主動將記憶體的數據刷新到硬碟 wf.writelines(['123\n', '456\n']) 3.邊讀邊寫:重點 with open('1.txt', 'r', encoding='utf-8') as rf: with open('2.txt', 'w', encoding='utf-8') as wf: for line in rf: wf.write(line) 4.模式
主模式:r | w | a | x r: 文件必須有的讀,游標預設在開頭,游標可以移動 w:文件有清空,無創建的寫模式,雖然游標可以移動,但該模式一定會清空文件 a:文件有追加,無創建的寫模式,游標永遠從末尾開始操作 x:文件無創建寫,有報錯 從模式:t | b | + t:預設模式,以字元形式操作 b:以位元組形式操作 +:可讀可寫 5.seek(offset, type) -- offset: 偏移的位元組數 -- type:0 - 游標從頭開始 | 1 - 游標從當前開始 | 2 - 游標從末尾開始 -- 游標操作必須在rb模式下 '''
二,記憶體管理
引用計數:垃圾回收機制的依據
# 1.變數的值被引用,該值的引用計數 +1
# 2.變數的值被解綁,該值的引用計數 -1
# 3.引用計數為0時就會被垃圾回收機制回收
引用計數會出現迴圈引用問題:相互引用無法釋放
# 1.兩個變數引用其值,值之間又相互引用 # 2.變數與值進行解綁,但是值之間還存在相互引用,導致值得引用計數永遠 >0 # 3.引用計數>0的值永遠無法被引用計數機制回收,導致記憶體泄露
標記清除:解決迴圈引用問題
# 所有線程能訪問到的棧區變數,稱之為 gc roots對象 # 1.所有gc roots對象可以直接或間接訪問到的變數值,都會被 標記機制 標記為存活狀態 # 2.將所有存活狀態的值形成新的拷貝,變數完成重新引用 # 3.清除機制 會將之前所有產生的值都進行回收
分代回收:採用的還是引用計數來回收,是對該機制的一個優化措施
# 1.剛產生的變數值放在新生代中高頻率檢查,如果引用計數為0,就是採用引用計數機制回收,長期存活的變數值經過多次檢查後會提高分代 # 2.分帶又高,檢查頻率越低,且還能繼續提高一直存活的變數值的分帶,從而來提高整體垃圾回收的效率