%python -m timeit -s "import copy" "x = (1, 2, 3)" "copy.deepcopy(x)"
100000 loops, best of 3: 10.1 usec per loop
%python -m timeit -s "import copy" "x = (1, 2, 3)" "copy.copy(x)"
1000000 loops, best of 3: 0.609 usec per loop
爲什麼deepcopy
比copy
慢15倍?copy.copy vs copy.deepcopy元組上的性能
每個函數都必須迭代元組中的元素。在該迭代期間,copy
爲每個元素創建另一個引用; deepcopy
深度覆蓋每個元素。
但是每個元素都是int
,而深拷貝int
只是創建另一個引用。換句話說,這兩個功能似乎執行完全相同的步驟,相同的次數。
這裏有沒有新的實例在過程中創建的驗證:
ActivePython 3.2.1.2 (ActiveState Software Inc.) based on
Python 3.2.1 (default, Jul 18 2011, 14:31:09) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> x = (1,2,3)
>>> import copy
>>> y = copy.copy(x)
>>> z = copy.deepcopy(x)
>>> x is y
True
>>> x is z
True
>>> x[1] is z[1]
True
不是一個真正的答案,但懷疑:'deepcopy'需要保持的元素它已經被複制到允許循環引用,這可能會增加一些開銷,尤其是在這種簡單的情況下軌道。 – Philipp 2012-04-22 19:23:13
如果您可以推出自己的「deepcopy」副本,這可能是值得的。我正在分析一些演化算法代碼,它在深度拷貝上花費了大量時間。我能夠確定算法所需的約束條件,並編寫自己的限制版本的deepcopy,從而大大加快了速度。你的旅費可能會改變。 – Levon 2012-04-22 19:27:42