파이썬 del 이 함수인가요?
조회수 3565회
함수를 호출할 때 함수명(매개변수) 이렇게 호출하는데 파이썬에서 del 은 del 객체로 사용합니다. 책에서 del을 함수라고 하는데 del은 함수 사용법이 다른 건가요? 아님 함수가 아닌 다른 무언가인가요?
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
del
표현은 연산자이자 키워드이며 변수를 제거(1)하거나 객체의 요소를 삭제하는 함수를 호출(2)합니다.GC(가비지 컬렉터)와 레퍼런스 카운트에 대해 들어본 적이 있으신지 모르겠습니다.
foo1 = Foo() # Foo 객체를 생성하고 foo1 변수가 참조하게 함. # Foo 객체의 레퍼런스 카운트는 1 foo2 = foo1 # foo1이 참조하는 것을 foo2 변수도 참조하게 함. # 레퍼런스 카운트는 2 del foo1 # foo1 변수를 제거함. (주의 : Foo 객체를 제거하는 것이 아님!) # 레퍼런스 카운트는 1 del foo2 # foo2 변수를 제거함. # 레퍼런스 카운트는 0 # GC가 Foo 객체를 곧 삭제할 예정!
이러한 것인데 보통은
del
을 명시적으로 해주지 않아도 변수가 함수 스코프를 벗어나면 자동으로 제거되어 레퍼런스 카운트가 줄어듭니다.
(1) 용례에서의del
은 그것을 명시적으로 해주는 역할을 하게 됩니다.
이때는 사실 함수라고 부르긴 애매하고 연산자라고 부르는 것이 더 좋습니다.(2) 용례에서는 그래도 함수라고 부를 수 있습니다.
class Foo(object): def __delitem__(self, key): # del obj[key]가 호출하는 함수 print(str(key)) # 보통은 key에 해당하는 내부 요소를 삭제합니다. foo = Foo() del foo[42] # 42를 출력. foo.__delitem__(42)와 동일 del foo["hi"] # hi를 출력. foo.__delitem__("hi")와 동일
함수인 것은 아니지만 함수를 호출하니까 함수라고 부를 수 있는 것이죠.
__delitem__
을 호출하는 문법적 설탕이라고 보시면 됩니다.사족으로 넓은 의미에서 함수는
x를 주면 연산하여 y를 뱉는 것
이라면 모두 함수라고 볼 수 있어서 문법상으로 함수가 아니더라도 함수라고 부르는 경우가 있습니다.
(1) 용례의del
에서x
는 변수이고연산
은 변수를 제거한다이며y
는 아무것도입니다.
(2) 용례의del
에서x
는 객체와 키이고연산
은 객체에서 키에 해당하는 요소를 제거한다이며y
는 역시 아무것도입니다.
이러한 관점에서는 함수라고 부를 수 있긴 합니다.-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력