2015-10-15 49 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 :) –