精華區beta Python 關於我們 聯絡資訊
※ 引述《qqttpp (ㄎ一歐)》之銘言: : 最近發現我要 : from xxx import ooo : aaa=ooo : aaa.sss()...............(1) : bbb=ooo : bbb.sss() : 這樣卻會發現我對aaa的總總行為(1)都會被bbb給繼承 : 或是說他根本直接就是對ooo作 : 我後來把所有的東西都放到def __init__()裡面 : 表面上似乎是就沒有殘留了 : 但是根本上還是會有問題 : 尤其是我用到threads的時候 : 有沒有辦法不要讓我對aaa的行為不會去影響ooo : 例如dictionary似乎也是有這樣的現象 : a={1:1,2:2} : b=a 寫b=a的話,b和a會refer到同一個物件 如果要複製一份a的話 import copy b=copy.copy(a) 再改變b就不會動到a了 可以參考 http://docs.python.org/lib/module-copy.html 順便比較一下copy.copy和copy.deepcopy的不同: a=[[1,2,3],['a','b','c']] b=copy.copy(a) 這樣 b和a是不同物件 但b[0]和a[0]是同一個物件,b[1]、a[1]也是同一個物件 (也就是shallow copy只copy a的最外層,裏面的東西還是同一個) 要看效果的話,可以試試: a[0]=a[0]+[4] a[1].append('d') print a print b 比較一下a和b應該就能了解了 用deep copy的話就完全不用擔心a,b會互相影響的問題 不過要注意recursion limit 這個問題和「繼承」似乎沒有關係? : b[1]=3 : 結果a={1:3,2:2} : ....我只想要改變b不想改變a阿..... : 請問是不是有什麼地方是我忽略的 : 謝謝囉~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.57.64.211 ※ 編輯: mantour 來自: 61.57.64.211 (07/04 16:08)
qqttpp:大感激 說的很詳細QQ 所以說大多時候就該用deepcopy囉 07/06 15:06