Python에서 pop() vs del: 동일한 결과, 완전히 다른 의도

발행: (2026년 2월 27일 오전 12:13 GMT+9)
4 분 소요
원문: Dev.to

Source: Dev.to

.pop() vs del in Python — 백만 달러 질문 💰

실제로 두 메서드 모두 리스트에서 항목을 제거하지만, 사용 철학은 다릅니다.

절대 잊지 말 것:

  • .pop() → 📨 배달 기사 – 리스트에서 항목을 제거하고 그 값을 전달해 줍니다.
  • del → 🔥 파쇄기 – 리스트에서 항목을 제거하고 파괴합니다. 값을 다시 얻을 수 없습니다.

.pop() 상황 (가장 일반적)

시나리오

작업 스택이나 카드 덱을 처리하고 있습니다. 값을 사용해야 하기 때문에 항목을 제거합니다.

tasks = ["Wash dishes", "Study SQL", "Sleep"]

# pop()은 마지막 항목을 제거하고 반환합니다
current_task = tasks.pop()

print(f"I'm working on: {current_task}")
# Output: I'm working on: Sleep

print(tasks)
# Output: ['Wash dishes', 'Study SQL']

🔎 Note: 결과를 변수에 할당하지 않더라도 "Sleep"은 여전히 제거됩니다. pop()의 핵심은 보통 제거된 값을 활용하는 데 있습니다.

del 상황 (정밀 제거)

시나리오

인덱스로 특정 항목을 삭제하고 싶고, 그 값은 필요하지 않습니다. 그냥 사라지길 원합니다.

users = ["Admin", "Felipe", "Malicious_Hacker", "Guest"]

# 해커가 인덱스 2에 있다는 걸 압니다.
# 값은 필요 없고, 그냥 삭제하고 싶습니다.
del users[2]

print(users)
# Output: ['Admin', 'Felipe', 'Guest']

del은 값을 가져오지 않고 항목을 제거해야 할 때 빛을 발합니다. pop()이 한 번에 하나의 항목만 제거한다면, del은 리스트 전체 슬라이스까지 제거할 수 있습니다:

numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 인덱스 2부터 5(포함되지 않음)까지 제거
del numbers[2:5]

print(numbers)
# Output: [0, 1, 5, 6, 7, 8, 9]

같은 작업을 pop()으로 하려면 루프나 여러 번 호출해야 합니다.

pop()이 실제로 하는 일

두 단계 수동 접근을 생각해 보세요:

x = p1[len(p1) - 1]   # 단계 1: 값 복사
del p1[len(p1) - 1]   # 단계 2: 삭제

이것이 pop()이 내부적으로 하는 일과 동일하지만, 한 줄로 표현됩니다:

x = p1.pop()   # 복사와 삭제를 동시에 수행

비교

연산값을 반환하나요?제거 방식슬라이스 제거?일반적인 사용 사례
list.pop(i)✅ 예인덱스 (기본값: 마지막)❌ 아니오스택, 큐, 요소 처리
del list[i]❌ 아니오인덱스✅ 예데이터 정리, 범위 제거
list.remove(x)❌ 아니오값 ("Felipe")❌ 아니오인덱스를 모를 때
0 조회
Back to Blog

관련 글

더 보기 »

알아야 할 배열 메서드

변형 메서드는 원본 배열을 변경합니다 - push – 끝에 추가 - pop – 끝에서 제거 - shift – 시작에서 제거 - unshift – 시작에 추가 이 모든 메서드는 새로운 배열을 반환하지 않습니다.

파이썬의 비밀스러운 삶: Default 함정

왜 빈 리스트를 기본 인수로 절대 사용하면 안 되는지. 🎧 Audio Edition: 듣는 것을 선호하시나요? 이 심층 탐구의 확장된 AI podcast 버전을 확인해 보세요.