2010-08-12 5 views
2

나는 목록이 들어있는 Python 클래스를 가지고 있는데, 여기에 나는 append() 값이있다.개체 내의 파이썬 목록을 어떻게 해제 할 수 있습니까?

이 클래스의 개체를 삭제 한 다음 나중에 동일한 스크립트에서 두 번째 개체를 만들면 두 번째 개체의 목록은 삭제시 첫 번째 개체의 목록과 같습니다. 예를 들어

:

class myObj: 
    a = [] 
    b = False 

o = myObj() 
o.a.append("I'm still here!") 
o.b = True 

del o 
import gc 
gc.collect() # just to be safe 
o = myObj() 

print(o.a) # ["I'm still here!"] 
print(o.b) # False 

목록 비울 수있는 방법입니다 :

while len(o.a): 
    o.a.pop() 

을하지만 그건 말도 안돼,하지 느린 언급. 쓰레기 수거 후 아직도 메모리에 남아있는 이유는 무엇이며, 클래스가 들어 왔을 때 덮어 쓰지 않는 이유는 무엇입니까? 모든 비 목록 구성원 변수는 올바르게 처리됩니다. append(), extend()insert() 모두 동일한 결과로 연결됩니다. 사용해야하는 또 다른 방법이 있습니까?

Here's my full test script. 잘 읽었을지라도, 회원 목록을 직접 삭제하려고하면 Python이 AttributeError를 제공합니다.

+2

, 나는 그것이 클래스'myObj' 전화를 혼란 생각합니다. 하나 들어, 파이썬 클래스는 일반적으로 대문자이고, 둘, 클래스, 객체가 아니므로 Obj라고하지 마십시오. – Skilldrick

+0

테스트 스크립트에서 명명 규칙에 대해 너무 많이 신경 쓰지는 않습니다.) – Artfunkel

답변

9

클래스 선언 내에 변수를 만들면 인스턴스 속성이 아닌 클래스 속성입니다. 인스턴스 속성을 만들려면 self.a 메소드 내에서 수행해야합니다. __init__.

변경이로 : BTW

class myObj: 
    def __init__(self): 
     self.a = [] 
     self.b = False 
+0

감사합니다. – Artfunkel

관련 문제