2017-10-18 2 views
1

저는 파이썬에 익숙하지 않고 C++에 익숙합니다. 나는 인스턴스의 목록을 만들려면 다음과 같은 않았다 파이썬 클래스 인스턴스 목록

from copy import deepcopy 

class C: 
    c1="" 
    c2="" 

Cs=[] 
C.c1="Hello" 
C.c2="World" 
Cs.append(deepcopy(C)) 

C.c1="Why" 
C.c2="this?" 
Cs.append(deepcopy(C)) 

for c in Cs: 
    print (c.c1, c.c2) 

나는 다음과 같은 출력 예상 :

Hello World 
Why this? 

을하지만, 가지고 :

Why this? 
Why this? 

왜 깊은 복사가 작동하지 않습니다 ?

+0

BTW, 당신은 그'C' 클래스의 인스턴스를 만들고 있지 않습니다. 파이썬 클래스는 C++과 조금 다르게 작동합니다. –

답변

2

c1 및 c2 변수의 복사본이 하나만 있습니다 (Java/C++에서 static). https://www.toptal.com/python/python-class-attributes-an-overly-thorough-guide을 읽고 코드에 self을 더 뿌려 수정하십시오.

+0

이 자습서를 지적 해 주셔서 감사합니다. 나는 클래스 C deepcopy 복사본을 가져 오기에서 에 내 코드를 변경 : 패스 고사 = [] IC = C() iC.c1 = "안녕하세요" iC.c2 = "세계" 고사를. 추가 (deepcopy (iC)) iC.c1 = "이유" iC.c2 = "this?" Cs.append C에 대한 연사 (deepcopy (IC)) : 인쇄 (C.C1, c.c2)' 이 파이썬에서 같은 일을 선호하는 방법이 있나요? – PyNewbie

관련 문제