在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',那么你就不会看到这种行为。 –