2015-10-15 50 views
1

在Python中,一個類裏面,看來當我保存一個「自我」變到另外一個,如果我編輯新的變量,「自我」也編輯:如何在python中保存「self」變量?

undropped_lines = self.flagged_lines 
    print self.flagged_lines 
    del undropped_lines[0] 
    print self.flagged_lines 

應該如何避免代碼中的這個特徵?

+1

請閱讀http://nedbatchelder.com/text/names.html以瞭解正在發生的事情。簡而言之,如果兩個名稱都指向一個可變值並且您改變了該值,那麼這兩個名稱都*參見*更新,因爲它們仍然指向同一個對象。如果'self.flagged_lines'是不可變的,並且你改變了'undropped_lines',那麼你就不會看到這種行爲。 –

回答

4

這是因爲列表是可變的,當您說undropped_lines = self.flagged_lines時,您只需在同一實例中指定一個新名稱。

如果你要一個副本使用undropped_lines = self.flagged_lines[:]

3

這是因爲undropped_linesself.flagged_lines都指向相同的數據。把它看作是指向同一實體的兩個不同的「名稱」。

您可以通過在分配給undropped_lines時創建列表的淺表副本來解決此問題。類似於:

undropped_lines = list(self.flagged_lines) 
+0

幾乎相隔3秒鐘的單詞+1 – Holloway

+0

@Trengot:確實是隊友,對你也是+1 :) –