以下代碼是我遇到的問題,正在尋找解釋。代碼的行爲與我預期的不同。下面的代碼將是我的預期輸出和實際輸出。最後要注意的是,我知道這個代碼可能是'奇怪的',使用範圍(1)有點奇怪,至少可以說。原因是程序中的這種確切發生(範圍是變量,但是在這些值)引起了問題..所以我讓這個簡單的代碼來複制它。列表與追加的Python奇怪行爲
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']
討論
我apprecia對這種情況發生的原因作出任何解釋。我不確定內置的append()函數是以何種方式影響所有用戶,或者如果每個用戶以某種方式共享他們的字段。在Python 2.7.3上運行。
'listA'是一類不是一個實例變量 – Voo
儘管是壓痕內爲類User()? – user650658
是的,儘管它被縮進到一個類變量的水平 –