Python 速查手冊

3.6 del 運算

關鍵字 (keyword) del 用來刪除物件 (object) ,詳細來說的話, del 的作用其實是刪除作用域中的識別字 (identifier) 名稱,如果該識別字連接到一個物件,而且這個物件只連接到那一個識別字的話,用 del 刪除的識別字,相關物件也會被刪除。

先來看到 del 的簡單應用,這裡設定變數 (variable) a22 ,然後用 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 ,這時候可以發現 ab 都連結到相同的串列物件,然後用 del 刪除 ab 依然連結到原先的串列 (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 為具有整數 123 的串列,然後用 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}
$

最後來比較 delNone 的差異, 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
$

上一頁: 3.5 邏輯運算
Python 速查手冊 - 目錄
下一頁: 3.7 is 運算
回 Python 教材首頁