以下代码是我遇到的一个问题,正在寻找解释。代码的行为与我的预期不同。代码下方将是我的预期输出和实际输出。最后要注意的一件事是,我知道这段代码可能很“奇怪”,而且使用 range(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 上运行。