[英]Understanding setdefault in Python
我很難理解我的代碼中發生了什么。 因此,如果我有以下一行:
d = {}
d.setdefault("key",[]).append("item")
這返回
{'key': ['item']}
所以我得到setdefault
作用。 它在字典d
檢查"key"
,如果不存在則創建它,否則如果存在則返回值。 這將返回一個可以操作的副本,並將在原始詞典中進行更新。 這對我來說是個新主意。 這是否意味着setdefault返回深拷貝而不是淺拷貝? 試圖把我的頭纏在這個淺拷貝和深拷貝之間。
等價於
item = d.get(key,default)
d[key] = item
d[key].action #in this case append
沒有Python操作可進行隱式復制。 曾經 就Python而言,隱式復制是邪惡的。
它是創建對象的文字。 每次調用setdefault時,它都會評估兩個參數。 當它評估第二個參數( []
)時,將創建一個新列表。 它與a = []
完全相同。
如果您將el = []
寫入,然后嘗試.setdefault
el
轉換為某種字典一次以上,則會看到沒有副本。
從神聖的docs
:
setdefault(key [,默認])
如果key在字典中,則返回其值。 如果不是,請插入具有默認值的密鑰,然后返回默認值。 默認默認為無。
一旦您放棄了該行為是副本的想法,該行為就很容易得到解釋。 它不是; 它是實際的對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.