前面章節介紹了不少關於 list 列表的操做函數,細心的讀者可能會發現,有不少操做函數的功能很是類似。例如,增長元素功能的函數有 append() 和 extend(),刪除元素功能的有 clear()、 remove()、pop() 和 del 關鍵字。
本節將經過實例演示的方式來明確各個函數的用法,以及某些函數之間的區別和在使用時的一些注意事項。html
定義兩個列表(分別是 list1 和 list3),並分別使用 +、extend()、append() 對這兩個 list 進行操做,其操做的結果賦值給 l2。實例代碼以下:python
tt = 'hello' # 定義一個包含多個類型的 list list1 = [1,4,tt,3.4,"yes",[1,2]] print(list1,id(list1)) print("1.----------------") # 比較 list 中添加元素的幾種方法的用法和區別 list3 = [6,7] l2 = list1 + list3 print(l2,id(l2)) print("2.----------------") # 效果等同於‘+’ l2 = list1.extend(list3) print(l2,id(l2)) print(list1,id(list1)) print("3.----------------") l2 = list1.append(list3) print(l2,id(l2)) print(list1,id(list1))
輸出結果爲:編程
[1, 4, 'hello', 3.4, 'yes', [1, 2]] 2251638471496 1.---------------- [1, 4, 'hello', 3.4, 'yes', [1, 2], 6, 7] 2251645237064 2.---------------- None 1792287952 [1, 4, 'hello', 3.4, 'yes', [1, 2], 6, 7] 2251638471496 3.---------------- None 1792287952 [1, 4, 'hello', 3.4, 'yes', [1, 2], 6, 7, [6, 7]] 2251638471496
根據輸出結果,能夠分析出如下幾個結論:緩存
接下來演示有關 del 的基本用法,實例代碼以下:多線程
tt = 'hello' # 定義一個包含多個類型的 list list1 = [1,4,tt,3.4,"yes",[1,2]] print(list1) del list1[2:5] print(list1) del list1[2] print(list1)
輸出結果爲:併發
[1, 4, 'hello', 3.4, 'yes', [1, 2]] [1, 4, [1, 2]] [1, 4]
這 3 行輸出分別是 list1 的原始內容、刪除一部分切片內容、刪除指定索引內容。能夠看到,del 關鍵字按照指定的位置刪掉了指定的內容。
須要注意的是,在使用 del 關鍵字時,必定要搞清楚,刪除的究竟是變量仍是數據。例如,下面代碼演示和刪除變量的方法:app
tt = 'hello' # 定義一個包含多個類型的 list list1 = [1,4,tt,3.4,"yes",[1,2]] l2 = list1 print(id(l2),id(list1)) del list1 print(l2) print(list1)
運行結果以下:函數
1765451922248 1765451922248 [1, 4, 'hello', 3.4, 'yes', [1, 2]] Traceback (most recent call last): File "C:\Users\mengma\Desktop\demo.py", line 8, in <module> print(list1) NameError: name 'list1' is not defined
第一行輸出的內容是 l2 和 list1 的地址,能夠看到它們是相同的,說明 l2 和 list1 之間的賦值僅僅是傳遞內存地址。接下來將 list1 刪掉,並打印 l2,能夠看到,l2 所指向的內存數據仍是存在的,這代表 del 刪除 list1 時僅僅是銷燬了變量 list1,並無刪除指定的數據。
除了刪除變量,其餘的刪除都是刪除數據,好比將列表中數據所有清空,實現代碼以下:性能
tt = 'hello' #定義一個包含多個類型的 list list1 = [1,4,tt,3.4,"yes",[1,2]] l2 = list1 l3 = l2 del l2[:] print(l2) print(l3)
輸出結果爲:spa
[] []
能夠看到,l3 和 l2 執行一樣的內存地址,當 l2 被清空以後,l3 的內容也被清空了。這代表內存中的數據真正改變了。
另外,在實際過程當中,即使使用 del 關鍵字刪除了指定變量,且該變量所佔用的內存再沒有其餘變量使用,此內存空間也不會真正地被系統回收並進行二次使用,它只是會被標記爲無效內存。
若是想讓系統回收這些可用的內存,須要藉助 gc 庫中的 collect() 函數。例如:
# 引入gc庫 import gc tt = 'hello' # 定義一個包含多個類型的 list list1 = [1,4,tt,3.4,"yes",[1,2]] del list1 # 回收內存地址 gc.collect()
前面咱們在《Python緩存機制》一節講過,系統爲了提高性能,會將一部分變量駐留在內存中。這個機制對於,多線程併發時程序產生大量佔用內存的變量沒法獲得釋放,或者某些再也不須要使用的全局變量佔用着大的內存,致使後續運行中出現內存不足的狀況,此時就可使用 del 關鍵字來回收內存,使系統的性能得以提高。同時,它能夠爲團隊省去擴充大量內存的成本。