다음 코드는 발생하여 설명을 찾는 문제입니다. 예상했던 것과 다른 코드의 동작. 아래 코드는 내 예상 출력과 실제 출력입니다. 마지막으로 주목해야 할 점은이 코드가 '이상한'코드 일 수 있으며 범위 (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']
토론
I의 apprecia 왜 이런 일이 벌어지는 지에 대한 설명. 내장 append() 함수가 어떻게 든 모든 사용자에게 영향을 주는지 또는 각 사용자가 어떻게 든 자신의 필드를 공유하는지는 확실하지 않습니다. Python 2.7.3에서 실행.
'listA'는 들여 쓰기 내부에도 불구하고 클래스하지 인스턴스 변수 – Voo
입니다 User() 클래스 용? – user650658
그렇습니다. 클래스 변수의 레벨에 들여 쓰기 되긴하지만 클래스 변수입니다. –