2011-08-12 71 views
3

目前我使用的複製模塊來創建一些對象,我有一個副本。的Python:複製對象與copy.deepcopy或寫我自己的副本

在特定條件(經常發生),我需要創建原始對象的可能若干份,然後分別修改他們每個人的(所以爲什麼我使用複印件)。

該對象有各種數據類型(列表,整數,字符串,其他類)的幾個實例,並且副本需要具有相同的值,但我不確定是否會更快地調用copy.deepcopy(),或做類似

 
def copy(self, other): 
    other.prop1 = self.prop1 
    other.prop2 = self.prop2 
    other.prop3 = self.prop3 

有沒有人遇到這個問題,然後決定最好使用複製模塊,因爲這將是比任何東西大多數人能想出更快?

PS:上面的代碼將無法正常複製的可變對象,而我提到的「其他類」。也許這表明deepcopy是最安全(最快)的路線?

+0

如果任何PROP1,PROP2或prop3的是可變的(即列表,字典,集,對象等,而不是爲int,元組,浮點型,frozenset),那麼你具有上面什麼會導致一個共享對象,並可能導致在bug中。 'a = [1,2,3]; b = a;在b.append(4);打印了''中[1,2,3,4]' – lambacck

+0

是什麼樣的對象它的結果嗎?什麼是副本?在Python中,與其他引用語義語言一樣,通常通過編寫算法來避免值複製,從而解決值複製問題。 –

+0

上述函數的正確名稱是'shallow_copy'。 –

回答

2

並不想成爲巧舌如簧,但你有沒有考慮剖析你的代碼? Documentation here。將copy.deepcopy與您自己的自定義複製方法進行比較。這樣,您就可以獲得有關您特定情況的嚴格數據,並且可以做出最佳決策 - 如果有人問您爲什麼這樣做,請備份它!

+0

是的,我一直在考慮分析我的代碼一段時間。我會試試看。 – MxyL

相關問題