簡體   English   中英

了解Python中的setdefault

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM