在 Python 中,有多種方法可以創建 a 的淺拷貝dict:模塊中的構造dict函式、dict.copy方法和函式:copycopy
>>> a = {'a':3, 'b': [1,2,3]}
>>> b = dict(a)
>>> c = a.copy()
>>> from copy import copy
>>> d = copy(a)
>>> a['a'] = 2
>>> a['b'].append(4)
>>> b
{'a': 3, 'b': [1, 2, 3, 4]}
>>> c
{'a': 3, 'b': [1, 2, 3, 4]}
>>> d
{'a': 3, 'b': [1, 2, 3, 4]}
>>> a
{'a': 2, 'b': [1, 2, 3, 4]}
從上面的例子來看,所有這 3 種方法似乎都達到了相同的結果。它們的功能是否存在差異,是否應該優先選擇其中一個?
可以針對串列提出類似的問題,我們可以在其中使用l2 = list(l1)、或。l2 = l1.copy()l2 = copy.copy(l1)l2 = l1[:]
uj5u.com熱心網友回復:
簡短的回答:它們在功能上是等效的。
檔案中沒有描述功能之間的差異。檢查源代碼,dict_merge在許多情況下,每個都將使用相同的函式 ( )。
查看copy模塊的源代碼,copy.copy呼叫dict.copy(以及其他一些特定于型別的復制方法,例如list.copy,用于這些型別的值)。copy(d)因此和之間的唯一區別d.copy()是必須知道一個變數才能有copy使用后者的方法。
注釋的幫助檔案dict(d):
dict(mapping) -> 從映射物件的 (key, value) 對初始化的新字典
建構式適用于所有映射型別,而不僅僅是字典。這不會導致功能差異,但可能會由于處理更一般的情況而影響性能。但是,檢查源代碼會顯示dict_merge用于處理復制資料的建構式呼叫,它專門處理dicts,因此底層函式可以應用特定于案例的優化。
dict.copy呼叫PyDict_copy,它自己處理一些特殊情況,但dict_merge如果這些都不適用,則呼叫。
總結:就功能而言,使用其中任何一個。如果一個值已知有一個copy方法(例如它已知是 a dict),d.copy()則可能是性能最高的選項。如果值的確切型別未知,但已知它是映射型別,請使用copy.copy()or dict()。如果對型別一無所知,請使用copy.copy().
上的復制操作list應該類似,盡管使用切片 ( l1[:]) 可能不會使用相同的底層函式。
uj5u.com熱心網友回復:
如果您希望變數中發生的任何更新發生在dict另一個變數上,您可以使用:
dictb=dicta
對可迭代/復合物件(例如串列)或不可迭代元素的任何更新都將發生在另一個上。
如果您希望不可迭代的元素保持不變,您可以逐個元素復制 的內容dict,或使用方法copy()
dictb= dicta.copy()
或者
dictb=copy(dicta)
最后,如果您不想在復制的dict使用中更新deepcopy()
from copy import deepcopy
dictb=deepcopy(dicta)
至于速度dicta.copy()是最快的,那么dict(dicta),那么copy(dicta)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/471967.html
標籤:Python python-3.x 列表 字典 复制
