파이썬 면접 질문·답변 마스터: 궁극의 준비 가이드
독자 여러분, 이 파이썬 프로그래밍 언어 면접 질문들은 파이썬 면접에서 마주칠 질문의 성격을 파악하도록 특별히 설계되었습니다. 제 경험상 좋은 면접관은 특정 질문을 계획하지 않고, 보통 주제의 기본 개념부터 시작해 이후 토론과 답변에 따라 질문을 이어갑니다.
파이썬 기초 면접 질문
파이썬이란?
파이썬은 고수준, 인터프리터, 대화형, 객체지향 스크립팅 언어입니다. 높은 가독성 설계. 다른 언어가 구두점 쓰는 곳에 영어 키워드 자주 사용, 문법 구성이 더 적음.
파이썬 주요 특징은?
- 함수형·구조적 프로그래밍과 OOP 지원
- 스크립트 언어로 쓰거나 바이트코드 컴파일로 대규모 애플리케이션 구축 가능
- 매우 고수준 동적 데이터 타입 제공, 동적 타입 검사 지원
- 자동 가비지 컬렉션 지원
- C, C++, COM, ActiveX, CORBA, Java와 쉽게 통합
파이썬은 대소문자 구분 언어인가?
예. 식별자, 함수명, 키워드가 대소문자로 구분됨. 코드 명확성과 정밀성 유지에 도움.
파이썬은 플랫폼 독립적인가?
예. 호환 인터프리터만 있으면 어떤 OS에서든 실행. 인터프리터가 하드웨어와 OS 세부사항 추상화.
파이썬 응용 분야는?
- 웹 개발: Django, Flask 등 프레임워크
- 데이터 분석: Pandas, NumPy 등 라이브러리
- 머신러닝: TensorFlow, Scikit-learn 등 도구
- 자동화: 스크립팅, 태스크 자동화
- 소프트웨어 개발: 데스크톱 애플리케이션 구축
파이썬 2와 3의 기본 차이는?
| 순번 | 항목 | Python 2 | Python 3 |
| 1 | Print 함수 | 괄호 없이 print 명령 사용 가능 | 문자열 출력 시 괄호 필수. 없으면 에러 |
| 2 | 유니코드 | ASCII str(), 별도 unicode(), 바이트 타입 없음 | 유니코드(utf-8), bytes·bytearray 두 바이트 클래스 |
| 3 | 예외 | 신구 표기법 모두 허용 | 예외 인자 괄호 없으면 SyntaxError |
| 4 | 비교 불가능 타입 비교 | 에러 발생 안 함 | TypeError 발생 |
파이썬에 double 데이터 타입이 있는가?
아니요. 파이썬은 부동소수점에 `float` 타입 사용, 더블 정밀도 기본값.
파이썬 문자열은 불변인가? (예/아니오)
예, 파이썬 문자열은 불변(immutable).
Python에서 True = False 가능한가?
아니요. True와 False는 서로 다른 불리언 값.
파이썬 환경 변수 면접 질문
PYTHONPATH 환경 변수 목적?
PATH와 유사. 파이썬 인터프리터가 프로그램에 임포트된 모듈 파일 위치 찾도록 지시. 파이썬 소스 라이브러리 디렉토리와 소스 코드 디렉토리 포함. 파이썬 설치 시 미리 설정되기도 함.
PYTHONSTARTUP 환경 변수 목적?
초기화 파일 경로 포함. 인터프리터 시작 시마다 실행. 유닉스에서 `.pythonrc.py`라 명명. 유틸리티 로드나 PYTHONPATH 수정 명령 포함.
PYTHONCASEOK 환경 변수 목적?
윈도우에서 임포트 문에서 첫 번째 대소문자 무시 매치 찾도록 파이썬에 지시. 아무 값이나 설정해 활성화.
PYTHONHOME 환경 변수 목적?
대체 모듈 검색 경로. 보통 PYTHONSTARTUP이나 PYTHONPATH 디렉토리에 임베드해 모듈 라이브러리 전환 쉽게 함.
파이썬 자료형과 연산 면접 질문
파이썬 지원 데이터 타입은?
파이썬 5대 표준 데이터 타입: Numbers, String, List, Tuple, Dictionary.
str = 'Hello World!'일 때 print str 출력?
str = "Hello World!"
print(str)
출력: Hello World!
str = 'Hello World!'일 때 print str[0] 출력?
파이썬 인덱싱은 0부터 시작.
str = 'Hello World!'
print(str[0])
출력: H
str = 'Hello World!'일 때 print str[2:5] 출력?
str = 'Hello World!'
print(str[2:5])
출력: llo
str = 'Hello World!'일 때 print str[2:] 출력?
str = 'Hello World!'
print(str[2:])
출력: llo World!
str = 'Hello World!'일 때 print str * 2 출력?
str = 'Hello World!'
print(str * 2)
출력: Hello World!Hello World!
str = 'Hello World!'일 때 print str + "TEST" 출력?
str = 'Hello World!'
print(str + "TEST")
출력: Hello World!TEST
list = ['abcd', 786, 2.23, 'john', 70.2]일 때 print list 출력?
list = ['abcd', 786, 2.23, 'john', 70.2]
print(list)
출력: ['abcd', 786, 2.23, 'john', 70.2]
list = ['abcd', 786, 2.23, 'john', 70.2]일 때 print list[0] 출력?
출력: abcd
list = ['abcd', 786, 2.23, 'john', 70.2]일 때 print list[1:3] 출력?
출력: [786, 2.23]
list = ['abcd', 786, 2.23, 'john', 70.2]일 때 print list[2:] 출력?
출력: [2.23, 'john', 70.2]
tinylist = [123, 'john']일 때 print tinylist * 2 출력?
tinylist = [123, 'john']
print(tinylist * 2)
출력: [123, 'john', 123, 'john']
list1 = ['abcd', 786, 2.23, 'john', 70.2], list2 = [123, 'john']일 때 print list1 + list2 출력?
list1 = ['abcd', 786, 2.23, 'john', 70.2]
list2 = [123, 'john']
print(list1 + list2)
출력: ['abcd', 786, 2.23, 'john', 70.2, 123, 'john']
파이썬 튜플 면접 질문
파이썬 튜플이란?
여러 항목 저장용 불변 시퀀스. 생성 후 수정 불가. 괄호로 정의. 고정된 항목 모음에 적합.
파이썬 리스트와 튜플 차이는?
리스트는 대괄호 `[ ]`, 요소·크기 변경 가능. 튜플은 소괄호 `( )`, 수정 불가. 튜플은 읽기 전용 리스트로 볼 수 있음.
tuple = ('abcd', 786, 2.23, 'john', 70.2)일 때 print tuple 출력?
출력: ('abcd', 786, 2.23, 'john', 70.2)
tuple[0], tuple[1:3], tuple[2:] 출력?
각각 abcd, (786, 2.23), (2.23, 'john', 70.2)
tinytuple = (123, 'john')일 때 print tinytuple * 2 출력?
출력: (123, 'john', 123, 'john')
tuple + tinytuple 출력?
출력: ('abcd', 786, 2.23, 'john', 70.2, 123, 'john')
파이썬 딕셔너리 면접 질문
파이썬 딕셔너리란?
해시 테이블 종류. 연관 배열이나 해시(Perl)처럼 작동. 키-값 쌍 구성. 키는 거의 모든 파이썬 타입 가능(주로 숫자·문자열). 값은 임의 파이썬 객체 가능.
딕셔너리 생성 방법은?
중괄호 `{ }`로 감싸고 대괄호 `[ ]`로 키 접근·할당.
dict = {}
dict['one'] = "This is one"
dict[2] = "This is two"
tinydict = {'name': 'john','code':6734, 'dept': 'sales'}
딕셔너리 모든 키 얻는 법?
`dictionary.keys()` 함수 사용.
print(dict.keys())
딕셔너리 모든 값 얻는 법?
`dictionary.values()` 함수 사용.
print(dict.values())
파이썬 문자열 면접 질문
문자열을 int로 변환?
`int()` 함수 사용. 유효한 정수 문자열이어야 함. 아니면 ValueError.
문자열을 float로 변환?
`float()` — 숫자 값 문자열을 float로 변환.
객체를 문자열로 변환?
`str(x)` — 객체를 문자열로 변환.
객체를 정규식 표현으로 변환?
`repr(x)` — 객체 x를 표현식 문자열로 변환.
문자열을 객체로 변환?
`eval(str)` — 문자열 평가 후 객체 반환.
문자열을 튜플로 변환?
`tuple(str)` — 문자열을 튜플로 변환.
tuple('Hello')
출력: ('H', 'e', 'l', 'l', 'o')
문자열을 리스트로 변환?
`list(str)` — 문자열을 리스트로 변환.
print(list('Hello'))
출력: ['H', 'e', 'l', 'l', 'o']
문자열을 셋으로 변환?
`set(str)` — 문자열을 셋으로 변환. 중복 요소 제거.
print(set('Hello'))
출력: {'e', 'o', 'H', 'l'}
튜플로 딕셔너리 생성?
`dict(zip(tup1,tup2))` — 튜플을 딕셔너리로 변환. `zip()`으로 튜플 쌍 맺고 `dict()`로 변환.
tup1 = ('a', 'b', 'c', 'd')
tup2 = (1, 2, 3, 4)
dic = dict(zip(tup1,tup2))
print(dic)
출력: {'a': 1, 'b': 2, 'c': 3, 'd': 4}
문자열 첫 글자 대문자로?
`capitalize()` — 문자열 첫 문자를 대문자로.
str1 = "tutorialspoint"
print(str1.capitalize())
출력: Tutorialspoint
문자열 모든 문자가 영숫자인지 확인?
`isalnum()` — 최소 1자 이상이고 모든 문자가 영숫자면 True.
문자열 모든 문자가 숫자인지 확인?
`isdigit()` — 숫자만 있으면 True.
문자열 모든 문자가 소문자인지 확인?
`islower()` — 최소 1개 케이스 문자 있고 모두 소문자면 True.
문자열 모든 문자가 숫자(유니코드)인지 확인?
`isnumeric()` — 유니코드 문자열이 숫자 문자만 포함하면 True.
문자열 모든 문자가 공백인지 확인?
`isspace()` — 공백 문자만 있으면 True.
문자열이 올바른 타이틀 케이스인지 확인?
`istitle()` — 올바르게 "titlecased"면 True.
문자열 모든 문자가 대문자인지 확인?
`isupper()` — 최소 1개 케이스 문자 있고 모두 대문자면 True.
시퀀스 요소 병합?
`join(seq)` — 시퀀스 seq 요소 문자열 표현을 구분자로 연결해 하나의 문자열로.
문자열 길이 구하기?
`len(string)` — 문자열 길이 반환.
문자열 좌측 정렬해 폭 맞춰 패딩?
`ljust(width[, fillchar])` — 원본 문자열 좌측 정렬해 전체 폭 `width` 맞춰 패딩.
문자열 모두 소문자로?
`lower()` — 대문자 모두 소문자로 변환.
문자열 앞 공백 제거?
`lstrip()` — 앞쪽 공백 모두 제거.
문자열 최대 알파벳 문자?
`max(str)` — 문자열 str에서 최대 알파벳 문자 반환.
문자열 최소 알파벳 문자?
`min(str)` — 문자열 str에서 최소 알파벳 문자 반환.
문자열 내 옛 부분문자열 모두 새 문자열로 치환?
`replace()` — 옛 부분문자열 모든 인스턴스를 새 부분문자열로 전체 문자열에서 치환.
str1 = "Welcome to tutorialspoint "
new_str = str1.replace("Welcome", 'Hello Welcome')
print(new_str)
출력: Hello Welcome to tutorialspoint
문자열 앞뒤 공백 모두 제거?
`strip()` — 앞뒤 공백 모두 제거한 새 문자열 반환.
str1 = " Welcome to tutorialspoint "
Str = str1.strip()
print(Str)
출력: Welcome to tutorialspoint
문자열 모든 글자 케이스 변경?
- `upper()`: 모두 대문자
- `lower()`: 모두 소문자
- `swapcase()`: 대소문자 스왑
- `capitalize()`: 첫 글자 대문자
- `title()`: 각 단어 첫 글자 대문자
문자열 타이틀 케이스 버전 얻기?
`title()` — 각 단어 첫 글자 대문자.
문자열 모두 대문자로?
`upper()` — 모두 대문자 변환.
문자열 모든 문자가 10진수인지 확인?
`isdecimal()` — 유니코드 문자열이 10진수 문자만 포함하면 True.
파이썬 리스트 면접 질문
리스트 del()과 remove() 차이는?
둘 다 리스트 요소 제거용. `del()`은 지정된 인덱스 요소 삭제. 슬라이싱으로 다중 삭제도 가능. `remove()`는 첫 번째 일치 요소 제거.
List = [1,2,3,4,5,6]
del List[1] # 인덱스 1 삭제
del List[2:3] # 슬라이싱 삭제
List.remove(5) # 값 5 제거
print(List)
출력: [1, 3, 6]
len([1, 2, 3]) 출력?
3
[1, 2, 3] + [4, 5, 6] 출력?
[1, 2, 3, 4, 5, 6]
['Hi!'] * 4 출력?
['Hi!', 'Hi!', 'Hi!', 'Hi!']
3 in [1, 2, 3] 출력?
True
for x in [1, 2, 3]: print x 출력?
1 2 3
L = [1,2,3]일 때 L[2], L[-2], L[1:] 출력?
각각 3, 2, [2, 3] (원문 오류 수정: L[1:]은 [2,3])
두 리스트 비교?
등호 `==` 사용. 같은 값이면 True.
list1=[1,2,3,4]; list2=[1,2,3,4]
print(list1==list2)
출력: True
리스트 길이 구하기?
`len()` 함수 사용.
list1 = [1,2,3,4,5]; print(len(list1))
출력: 5
리스트 최댓값 구하기?
`max()` 함수 사용.
list1 = [10,20,30,40,50]; print(max(list1))
출력: 50
리스트 최솟값 구하기?
`min()` 함수 사용.
list1 = [10,20,30,40,50]; print(min(list1))
출력: 10
리스트에서 객체 인덱스 구하기?
`index()` 함수 사용.
list1 = [10,20,30,40,50]; print(list1.index(30))
출력: 2
리스트 지정된 인덱스에 객체 삽입?
`insert(index, object)` 사용.
list1 = ['a','b','c','d','e']; list1.insert(3,'z')
출력: ['a', 'b', 'c', 'z', 'd', 'e']
리스트 마지막 객체 제거?
`pop()` 사용. 인덱스 인자 전달 가능, 해당 인덱스 객체 반환.
list1 = ['a','b','c','d','e']
list1.pop()
list1.pop(2)
print(list1)
출력: ['a', 'b', 'd']
리스트에서 객체 제거?
`remove()`, `del()`, `pop()` 사용 가능.
리스트 역순 정렬?
`reverse()` 함수 또는 슬라이싱 `[::-1]` 사용.
list1 = ['a','b','c','d','e']; print(list1.reverse())
list2 = [1,2,3,4,5]; rev = list2[::-1]; print(rev)
출력: ['e', 'd', 'c', 'b', 'a'], [5, 4, 3, 2, 1]
리스트 정렬?
`sort()` 기본 오름차순. 내림차순은 `reverse()` 후 적용.
list1 = [13,10,45,9,5,12]; list1.sort(); print(list1)
출력: [5, 9, 10, 12, 13, 45]
파이썬 연산자 면접 질문
** 연산자 목적?
거듭제곱 연산. `2**3`은 2의 3제곱.
// 연산자 목적?
버림 나눗셈(Floor Division). 두 수 나누고 결과보다 작거나 같은 최대 정수 반환.
print(9//5)
출력: 1
is 연산자 목적?
두 변수가 메모리상 동일 객체 참조인지 확인. 값이 아닌 객체 아이덴티티 비교.
not in 연산자 목적?
특정 요소가 시퀀스(리스트, 튜플, 문자열, 딕셔너리)에 없는지 확인. 없으면 True, 있으면 False.
파이썬 제어문 면접 질문
break 문 목적?
특정 조건 만족 시 루프 즉시 종료. 루프 다음 문장부터 계속.
continue 문 목적?
현재 반복 나머지 코드 건너뛰고 다음 반복으로 바로 이동. `break`와 달리 루프 자체는 종료 안 함.
pass 문 목적?
널(Null) 문장. 향후 구현할 함수/조건문 자리표시자. 블록 비우면 IndentationError 나므로 `pass`로 회피.
파이썬 random 모듈 면접 질문
리스트/튜플에서 랜덤 항목 선택?
`random.choice()` 함수. 주어진 리스트/튜플에서 랜덤 요소 반환. `import random` 필요. 랜덤 샘플링, 셔플, 단순 게임에 유용.
범위에서 랜덤 항목 선택?
`random.choice()`로 'start'부터 'stop-1' 범위 랜덤 요소 반환.
파이썬에서 랜덤 숫자 얻기?
`random()` — 0 ≤ r < 1인 랜덤 float r 반환.
난수 생성 시작값 설정?
`seed([x])` — 난수 생성용 정수 시작값 설정. 다른 random 함수 호출 전 호출. 반환값 None.
리스트 항목 제자리 셔플?
`shuffle(lst)` — 리스트 항목 제자리 랜덤화. 반환값 None.
파이썬 함수와 메모리 면접 질문
람다 함수란?
`lambda` 키워드로 익명 함수 생성. 문장 블록 없음. return 문 없음.
불완전한 함수 버전을 무엇이라 하는가?
스텁(Stub) 또는 파셜 함수(Partial function). 구현 없는 자리표시자 함수, 개발 중 다른 코드 테스트용.
함수 정의 시 매개변수·지역변수 저장 메모리 영역 명칭?
스택(Stack). 함수 호출 관리, 변수 저장, 특정 파일 반환 주소 관리.
파이썬 모듈과 라이브러리 면접 질문
OS 관련 메서드 적용에 쓰이는 파이썬 모듈?
`os` 모듈. 운영체제와 상호작용. 파일·디렉토리 조작, 프로세스 관리, 환경 변수, 크로스플랫폼 OS 작업 가능.
머신러닝용 파이썬 라이브러리?
`scikit-learn` 라이브러리.
파이썬 버그 찾기 도구?
- `pdb`: 내장 대화형 디버거
- `pylint`: 정적 코드 분석 도구, 에러 검사
- `pyflakes`: 코드 실행 없이 분석