首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Python dict.clear() 方法詳解:就地清空字典、O(1) 操作、與重新賦值 {} 差異對照

     編輯:更多程式設計知識

dict.clear() 將字典就地清空,移除所有鍵值對,保留字典物件身分。不同於重新賦值 d = {} (建立新物件),clear() 影響所有指向該字典的引用。

語法與行為


d.clear()
# 參數:無
# 回傳:None
# 效能:O(1) (CPython 實現只重置內部表格)
# 行為:就地修改,所有引用可見變化

基本範例


d = {'Name': 'Zara', 'Age': 7}
print(f'清空前長度: {len(d)}')  # 2

d.clear()
print(f'清空後長度: {len(d)}')  # 0
print(d)  # {}

clear() vs 重新賦值 關鍵差異


# 情境:多變數指向同一字典
original = {'a': 1}
ref1 = original
ref2 = original

# 使用 clear()
original.clear()
print(ref1)  # {}  受影響!
print(ref2)  # {}  受影響!

# 重新賦值
original = {'a': 1}
ref1 = original
ref2 = original

original = {}  # 建立新字典,original 指向新物件
print(ref1)  # {'a': 1}  不受影響!
print(ref2)  # {'a': 1}  不受影響!

何時用 clear()、何時用重新賦值

場景推薦理由
需通知所有持有者字典已空clear()共享狀態同步
區域變數、無外部引用d = {}簡潔、語意明確
函數參數清空呼叫端字典clear()副作用可見
類別屬性重置clear()影響所有實例/子類

進階:自訂字典清空行為


class ObservableDict(dict):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.observers = []
    
    def clear(self):
        super().clear()
        self._notify('cleared')
    
    def _notify(self, event):
        for cb in self.observers:
            cb(self, event)

# 使用
od = ObservableDict(a=1, b=2)
od.observers.append(lambda d, e: print(f'字典{e}: {d}'))
od.clear()  # 觸發通知

相關方法對照

方法行為回傳值影響引用
clear()移除所有項目None是
pop(k)移除指定鍵值是
popitem()移除任一項 (LIFO)(k, v)是
d = {}建立新字典新物件否 (僅重綁定)

理解 clear() 的就地語意,能正確處理共享狀態場景,避免「以為清空了但引用還有舊資料」的 Bug。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved