在Python中,一個類裏面,看來當我保存一個「自我」變到另外一個,如果我編輯新的變量,「自我」也編輯:如何在python中保存「self」變量?
undropped_lines = self.flagged_lines
print self.flagged_lines
del undropped_lines[0]
print self.flagged_lines
應該如何避免代碼中的這個特徵?
在Python中,一個類裏面,看來當我保存一個「自我」變到另外一個,如果我編輯新的變量,「自我」也編輯:如何在python中保存「self」變量?
undropped_lines = self.flagged_lines
print self.flagged_lines
del undropped_lines[0]
print self.flagged_lines
應該如何避免代碼中的這個特徵?
這是因爲列表是可變的,當您說undropped_lines = self.flagged_lines
時,您只需在同一實例中指定一個新名稱。
如果你要一個副本使用undropped_lines = self.flagged_lines[:]
這是因爲undropped_lines
和self.flagged_lines
都指向相同的數據。把它看作是指向同一實體的兩個不同的「名稱」。
您可以通過在分配給undropped_lines
時創建列表的淺表副本來解決此問題。類似於:
undropped_lines = list(self.flagged_lines)
幾乎相隔3秒鐘的單詞+1 – Holloway
@Trengot:確實是隊友,對你也是+1 :) –
請閱讀http://nedbatchelder.com/text/names.html以瞭解正在發生的事情。簡而言之,如果兩個名稱都指向一個可變值並且您改變了該值,那麼這兩個名稱都*參見*更新,因爲它們仍然指向同一個對象。如果'self.flagged_lines'是不可變的,並且你改變了'undropped_lines',那麼你就不會看到這種行爲。 –