핵심은 "None"과 "빈 리스트([])"는 전혀 다르다는 것
| 표현 | 의미 | True/False 여부 |
|---|---|---|
stack is None | stack 변수가 아예 None 객체인지 확인 | True ↔ stack = None일 때만 |
not stack | stack이 비었는지(False인지) 확인 | True ↔ stack = [], '', 0, False 등 |
stack = Nonestack = None
if stack is None:
print("stack is None!") # ✅ 출력됨
if not stack:
print("stack is empty or falsy!") # ✅ 이것도 출력됨
stack is None → True (딱 None 객체임)not stack → True (None은 Falsy 값이니까)✅ 둘 다 실행됨
stack = [] (빈 리스트)stack = []
if stack is None:
print("stack is None!") # ❌ 실행 안됨
if not stack:
print("stack is empty or falsy!") # ✅ 실행됨
stack is None → False (그냥 빈 리스트일 뿐임)not stack → True (빈 리스트는 Falsy)✅ not stack만 실행됨
stack = [1, 2, 3] (비어있지 않은 리스트)stack = [1, 2, 3]
if stack is None:
print("stack is None!") # ❌
if not stack:
print("stack is empty or falsy!") # ❌
둘 다 조건 안 맞아서 출력 안 됨
| 상황 | 추천 조건문 |
|---|---|
| 변수가 None인지 정확히 체크하고 싶다 | if stack is None: |
| 리스트가 비었는지 확인하고 싶다 | if not stack: |
| 리스트가 비어있지 않은지 확인 | if stack: |
대부분의 경우, 리스트나 dict 등 컨테이너가 비었는지 확인하고 싶다면 if not stack: 혹은 if stack:이 정석
is None은 정말로 None인지 확인하는 경우 (예: 아직 초기화 안 됐는지 확인할 때)만 쓰는것.