2011-11-23 2 views
115

파이썬에서 변수의 값을 지우는 방법이 있습니까? 예를 들어파이썬에서 변수를 지우려면

나는 이진 트리를 구현하는 경우 :

Class Node: 
    self.left = somenode1 
    self.right = somenode2 

내가 트리의 일부 노드를 제거하고 싶다면, 내가 비워 self.left를 설정해야합니다.

답변

104

self.left = None의 문제점은 무엇입니까? 귀하의 질문을 잘못 해석했거나 None 키워드에 익숙하지 않습니까?

+7

None 키워드에 익숙하지 않습니다. 다른 언어의 null과 비슷합니까? – Bnicholas

+1

예; 그것은 null과 같습니다. – Smashery

+0

예, '없음'은 'null', 'nil' 및 모든'동의어 '와 같습니다. – juliomalegria

242

del 키워드를 사용합니다. 편집을 할

>>> a=1 
>>> a 
1 
>>> del a 
>>> a 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'a' is not defined 

:하지만 self.left = None

+11

가끔씩이 작업이 완전히 제거되지 않으면 메모리에있는 해당 참조 만 제거됩니다. 이것은 gc를 얻지 못하는 유령 변수를 메모리에 남겨 둘 수 있습니다. –

+2

'del' 또한 존재하지 않는 변수를 지우려고하면 예외를 던지는 단점이 있습니다. 보통은 * 바람직하지 않습니다. –

+16

필자가 실수로'type (...) '을 입력 할 때'type = ...'과 같은 명령으로 덮어 쓰는 변수를 실수로 선언했다면 원래의 것을 되돌릴 수있는 가장 쉬운 방법이라고 지적하고 싶었습니다 기능. 즉, None으로 유지하면 기본 함수에 대한 액세스를 차단할 수 있습니다. – mpacer

2

투표이 경우이 작업을 시도 할 수 있습니다 :

self.left = None 
1

self.left = None이 작업을 수행해야합니다.

59

var = None "값을 지우고"변수의 값을 "없음"과 같이 "null"로 설정하지만 변수에 대한 포인터는 그대로 유지됩니다.

del var은 변수에 대한 정의를 완전히 제거합니다.

나중에 변수를 사용하려는 경우에 사용합니다. 새 값을 설정하십시오. 즉 변수를 유지하면 None이 더 좋습니다.

44

실제로 변수/속성은 삭제되지 않습니다. 변수의 값은 None으로 설정되므로 변수는 여전히 메모리에서 공간을 차지합니다. 변수의 모든 존재를 메모리에서 완전히 지우려면 다음을 입력하십시오.

del self.left 
+5

왜 = None 응답이 그렇게 대중적인지 이해할 수 없습니다. 이것은 정답입니다 –

+0

OP는 '제거하지 말 것'이라고 말했습니다. del 속성 및 조회를 죽일 것입니다. 'self.left'를 검사 할 수있는 것보다 None으로 설정하는 것이 더 깔끔하고 노드가 비어 있는지 확인하는 것이 좋습니다. – user1767754

관련 문제