Le code suivant est un problème que j'ai rencontré et je cherche une explication. Le comportement du code différent de ce que je m'attendais. Ci-dessous le code sera ma sortie attendue, et la sortie réelle. Une dernière chose à noter, c'est que je comprends que ce code peut être «étrange», et que l'utilisation de range (1) est un peu étrange, c'est le moins qu'on puisse dire. La raison en est que cette occurrence exacte dans un programme (les plages étaient des variables mais à ces valeurs) a causé des problèmes. J'ai donc fait ce simple code pour le répliquer.Comportement étrange de Python avec List & Append
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)
Sortie prévue
['a']
['b']
['a']
['b']
['a']
['b']
['a']
['b']
['a']
['b']
de sortie réelle
['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']
Discussion
I apprécia te toute explication quant à la raison pour laquelle cela se produit. Je ne suis pas sûr si la fonction intégrée append() affecte d'une manière ou d'une autre tous les utilisateurs, ou si chaque utilisateur partage en quelque sorte leurs champs. En cours d'exécution sur Python 2.7.3.
'listA' est une classe pas une variable d'instance – Voo
En dépit d'être à l'intérieur de l'empreinte pour la classe User()? – user650658
Oui, c'est une variable de classe bien qu'elle soit indentée au niveau d'une variable de classe –