2017-12-04 1 views
0

프로젝트 작업 중이 이상한 동작이 발생했습니다. 다음 코드는이를 재현하는 방법을 보여줍니다.배열 속성을 사용하여 파이썬 인스턴스를 만드는이 이상한 동작이 발생하는 이유는 무엇입니까?

['x'] 
['x'] 
['x'] 

새로운 TestClass에 인스턴스가 루프 내에서 생성됩니다 가입일 :

class TestClass: 
    def __init__(self, arr=[]): 
     self.arr = arr 


if __name__ == '__main__': 
    for i in range(3): 
     test = TestClass() 
     test.arr.append('x') 
     print(test.arr) 

나는 다음과 같은 출력을 기대. 대신에 :

['x'] 
['x', 'x'] 
['x', 'x', 'x'] 

나는 오해 했습니까?

파이썬 --version 출력 :

파이썬에서 기본 값이 매번 함수가이 번에 할당,라고하며 매번 당신은 당신이 동일한 개체에 액세스하는 함수를 호출 재 할당되지
Python 3.6.3 :: Anaconda, Inc. 

답변

1

. 따라서 기본값이 array 또는 dict과 같이 변경 가능한 개체 인 경우 모든 호출이 변경 될 수 있습니다.

class TestClass: 
    def __init__(self, arr=None): 
     self.arr = [] if arr is None else arr 
:

이 주변의 일반적인 방법은 다음을 수행하는 것입니다

관련 문제