用Python名单及附加奇怪的行为(Python Strange Behavior with Lis

2019-09-18 14:33发布

下面的代码是我遇到的问题,并正在寻找一个解释。 比我预期的不同代码的行为。 下面的代码将是我预期的输出和实际输出。 要注意,最后一件事是,我明白这些代码可能是“奇怪”,而且使用范围(1)是一个有点奇怪,至少可以说。 这样做的原因是程序中的这个确切的发生(范围是变量,但这些值)引起的问题..所以我做了这个简单的代码来复制它。

userList = []

class User():
    listA = []
    listB = []

    def setup(self):
        for i in range(1):
            self.listA.append('a')
            self.listB.append('b')

for i in range(5):
    user = User()
    userList.append(user)

for i in range(len(userList)):
    userList[i].setup()

for i in range(len(userList)):
    print str(userList[i].listA)
    print str(userList[i].listB)

预计输出

['a']
['b']
['a']
['b']
['a']
['b']
['a']
['b']
['a']
['b']

实际输出

['a','a','a','a','a']
['b','b','b','b','b']
['a','a','a','a','a']
['b','b','b','b','b']
['a','a','a','a','a']
['b','b','b','b','b']
['a','a','a','a','a']
['b','b','b','b','b']
['a','a','a','a','a']
['b','b','b','b','b']

讨论

我明白任何解释,为什么发生这种情况。 我不知道如果内置的append()函数以某种方式影响所有用户,或者如果每个用户以某种方式分享他们的领域。 运行在的Python 2.7.3。

Answer 1:

与此相比,你的代码

class User():
    def setup(self):
        self.listA = []                          # instance variable
        self.listB = []                          # instance variable
        for i in range(1):
            self.listA.append('a')
            self.listB.append('b')

请注意,这是没有必要在类级别,以“声明”的任何变量



文章来源: Python Strange Behavior with List & Append