2014-12-05 1 views
0
class a: 
    b = [] 

c = a() 
d = a() 
print(c.b, d.b) # output: [] [] 
c.b.append(1) 
print(c.b, d.b) # expected: [1] [] 
       # output: [1] [1] 

정확히 여기서 무엇이 일어나고 있습니까? 나는 응용 프로그램을 개발하려고하는데, 당신이 짐작할 수 있듯이,이 일은 다소 어려워지고 있습니다.여러 클래스 인스턴스가이 목록을 공유합니까?

저는 파이썬이 여기에서하고 있다고 생각하는 것과 내가 다르게해야 할 것이 무엇인지 알고 싶습니다.

관련, 내 파이썬 버전입니다

파이썬 3.4.2 (v3.4.2 : ab2c023a9432 10 월 (6) 2014 년 22시 15분 5초) [MSC v.1600 32 비트 (인텔)]에 win32

답변

2

b 변수는 클래스 최상위 레벨에 지정되므로 클래스 변수입니다. 즉, 어떤 인스턴스를 통해 액세스했는지에 관계없이 (또는 직접 클래스를 통해 액세스하는 경우에는 a.b과 같은) 동일한 목록 객체를 항상 볼 수 있습니다.

당신이 각 인스턴스에 별도의 목록을 원하는 경우, __init__ 방법에 self의 속성에 할당과 변수를 만들 :

class a: 
    def __init__(self): 
     self.b = [] 
관련 문제