Python 速查手冊
3.6 del 運算
關鍵字 (keyword) del 用來刪除物件 (object) ,詳細來說的話, del 的作用其實是刪除作用域中的識別字 (identifier) 名稱,如果該識別字連接到一個物件,而且這個物件只連接到那一個識別字的話,用 del 刪除的識別字,相關物件也會被刪除。
先來看到 del 的簡單應用,這裡設定變數 (variable) a 為 22 ,然後用 del 刪除變數 a ,再次存取 a 就會發生 NameError ,也就是變數 a 的名稱已經不存在於作用域
a = 22
print(a)
del a
print(a)
#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:del01.py
# 功能:示範 del 運算
# 作者:張凱慶
於命令列執行以上程式,結果如下
$ python3 del01.py |
22 |
Traceback (most recent call last): |
File "del01.py", line 4, in <module> |
print(a) |
NameError: name 'a' is not defined |
$ |
再來重新將 a 設定為空串列 (empty list) ,並且新設另一個變數 b ,把 a 指派給 b ,然後 a 利用 append() 方法 (method) 新增一個元素整數 1 ,這時候可以發現 a 與 b 都連結到相同的串列物件,然後用 del 刪除 a , b 依然連結到原先的串列 (list)
a = []
b = a
a.append(1)
print("a:", a)
print("b:", b)
del a
print("b:", b)
#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:del02.py
# 功能:示範 del 運算
# 作者:張凱慶
於命令列執行以上程式,結果如下
$ python3 del02.py |
a: [1] |
b: [1] |
b: [1] |
$ |
del 也可以刪除串列元素,例如 a 為具有整數 1 、 2 、 3 的串列,然後用 del 刪除索引值為 1 的元素,這時候 a 就剩下兩個元素而已
a = [1, 2, 3]
print(a)
del a[1]
print(a)
#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:del03.py
# 功能:示範 del 運算
# 作者:張凱慶
於命令列執行以上程式,結果如下
$ python3 del03.py |
[1, 2, 3] |
[1, 3] |
$ |
同樣的, del 也能刪除字典 (dictionary) 的元素,如此例刪除 key 為字串 1 的 value , a 就只剩下一組 key-value 的配對
a = {"1":1, "2":2}
print(a)
del a["1"]
print(a)
#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:del04.py
# 功能:示範 del 運算
# 作者:張凱慶
於命令列執行以上程式,結果如下
$ python3 del04.py |
{'2': 2, '1': 1} |
{'2': 2} |
$ |
最後來比較 del 跟 None 的差異, None 是將變數原有連結的物件取消,此例變數 a 原本指向整數 1 ,重新設定 a 等於 None 之後, a 的名稱仍然存在於作用域,只是沒有內容而已,可是一旦用 del 刪除 a 之後, a 的名稱在作用域便消失了
a = 1
a = None
print(a)
del a
print(a)
#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:del05.py
# 功能:示範 del 運算
# 作者:張凱慶
於命令列執行以上程式,結果如下
$ python3 del05.py |
None |
Traceback (most recent call last): |
File "del05.py", line 5, in <module> |
print(a) |
NameError: name 'a' is not defined |
$ |
相關教學影片