为什么这会发生在课堂上

use*_*392 1 python class python-2.7

我写过以下课程,其中包括以下内容:

class abc:
    def __init__(self):
        self.Values = []
    def add_code(self):
        lastval = self.Values
        print "self.Values  , ", self.Values
        print "lastval  , ", lastval
        lastval.append(1)
        print "self.Values 1, ", self.Values
        print "lastval 1 , ", lastval

        lastval.append(2)
        print "lastval 2 , ", lastval
        print "self.Values 2 , ", self.Values
        lastval.append(3)
        print "lastval 3 , ", lastval
        print "self.Values 3 , ", self.Values
        lastval.append(4)
        print "last val 4 ", lastval
        print "self.Values 4 , ", self.Values
        lastval = []
        print "last value is emtpy now? , ", lastval
        print "But the self.Values is not", self.Values
        return lastval
Run Code Online (Sandbox Code Playgroud)

当我运行这段代码时,我看到变量lastval附加了值,self.Values 但是当我初始化lastval带空列表时,我仍然看到self.Values值保持不变.可能是什么原因

Dan*_*man 7

你为什么不这么想?首先,您指定lastval指向相同的列表self.Values,因此在另一个中将看到一个突变.但是当你这么做时,lastval = []你只需重新绑定lastval到一个新的列表,你根本不会受到影响self.Values.