2012-10-28 2 views
1

예상대로 작동하지 않는 이유는 무엇입니까? 나는 이유를 알 수 없다.목록에 추가 할 때 인스턴스 변수가 작동하지 않는 경우 - Python

class Fred: 
    def __init__(self): 
      self.a=0 

fred=Fred() 
lista=[] 

for i in range(5): 
    fred.a=i 
    lista.append(fred) 

for i in lista: 
    print(str(i.a)) 

내가 얻는 것은 5 번 4 번이며 0-4가 아닙니다. 의견이 있으십니까? 감사합니다

+1

'lista'의 모든 요소가 동일한 요소를 참조하고 있으며, fred 객체의 최신 업데이트 값 이후로 숫자 4가 표시됩니다. – avasal

답변

1

무슨 일이 벌어 지는지는 프레드에 대한 참조가 for i in range(5)에 루프 할 때마다 덮어 쓰여지고 있다는 것입니다. 루프 내에서 fred=Fred()을 이동하고 매번 새 오브젝트를 작성하면 예상 결과가 표시됩니다.

0

하나의 Fred 인스턴스가 있고 그 중 하나의 인스턴스를 계속 추가하면서 그 동안 해당 a 속성을 변경합니다. 목록에 추가하면 Fred 개체가 복사되지 않습니다. 동일한 객체에 다른 참조를 추가하기 만하면됩니다. 루프의 각 반복 안에 새로운 Fred을 생성하여 예상되는 동작을 얻을 수 있습니다.

관련 문제