컴퓨터/정보>중등 정보>프로그래밍 기초 - 변수와 자료형
개념 정리

프로그래밍 기초 - 변수와 자료형

단원 개요
변수와 객체 참조 모델, 정적 타이핑과 동적 타이핑의 차이, 파이썬 핵심 컬렉션(list, tuple, dict, set)의 시간 복잡도와 가변·불변성(Mutability)을 학습합니다.
선수 개념
프로그래밍 첫걸음 - 순차 실행과 코드 읽기
필수 키워드:컴파일(Compile) 시점프로그램 실행(Runtime) 시점모든 원소가 해시 가능할 때만가변 객체 (Mutable - 수정 가능)참조 공유 주의점list (동적 배열)tuple (불변 시퀀스)dict (해시 테이블)set (해시 집합)중복 제거
1

변수의 메모리 바인딩과 정적 타이핑 vs 동적 타이핑

•
정적 타이핑 (Static Typing - C, C++, Java, Go, Rust, TypeScript):
•
변수를 선언할 때 자료형을 명시(int count = 10;)하며, 컴파일(Compile) 시점에 타입 일치 여부를 엄격히 검사합니다. 실행 속도가 빠르고 대규모 프로젝트에서 타입 안정성이 높습니다.
•
동적 타이핑 (Dynamic Typing - Python, JavaScript, Ruby):
•
변수 선언 시 타입을 적지 않으며(x = 10 후 x = "hello" 가능), 프로그램 실행(Runtime) 시점에 할당되는 값(객체)에 따라 타입이 동적으로 결정됩니다.
•
파이썬의 객체 참조 모델 (Name Binding):
•
C언어의 변수가 값을 직접 담는 '메모리 상자'라면, 파이썬의 변수는 힙(Heap) 메모리에 생성된 객체(Object)의 주소를 가리키는 '이름표(포인터 참조)'입니다.
•
따라서 b = a를 실행하면 데이터가 복사되는 것이 아니라, 변수 b가 변수 a와 동일한 메모리 객체 주소를 함께 가리키게(참조 공유) 됩니다.
핵심 원리
파이썬에서 a == b는 두 객체의 '값(Value)이 같은지'를 비교하는 연산자이고, a is b는 두 변수가 가리키는 '실제 메모리 주소(id)가 완전히 동일한 객체인지'를 비교하는 연산자입니다.
2

불변 객체(Immutable) vs 가변 객체(Mutable)와 얕은/깊은 복사

파이썬의 자료형은 생성 후 내부 값을 바꿀 수 있는지에 따라 두 부류로 엄격히 나뉩니다:

1
불변 객체 (Immutable - 수정 불가): int, float, bool, str(문자열), tuple(튜플)
•
한 번 생성되면 메모리 내부 값을 절대 바꿀 수 없습니다. x = x + 1이나 문자열 연결을 수행하면 기존 메모리가 바뀌는 게 아니라 새로운 객체가 생성되어 이름표가 옮겨 붙습니다.
•
불변성과 해시 가능성은 같은 뜻이 아닙니다. 튜플은 불변 컨테이너지만, 모든 원소가 해시 가능할 때만 튜플 자체도 딕셔너리 키나 집합 원소가 될 수 있습니다. 예를 들어 (1, "서울")은 해시 가능하지만 (1, ["서울"])은 리스트 원소 때문에 해시할 수 없습니다. ([Python 공식 용어집: hashable](https://docs.python.org/3/glossary.html#term-hashable))
2
가변 객체 (Mutable - 수정 가능): list(리스트), dict(딕셔너리), set(집합)
•
객체의 메모리 주소를 유지한 채로 내부 원소를 추가·수정·삭제할 수 있습니다.
•
참조 공유 주의점: 가변 리스트 a = [1, 2, 3]에 대해 b = a로 대입한 뒤 b.append(4)를 실행하면 원본 a도 함께 [1, 2, 3, 4]로 변경(Side Effect)됩니다! 원본을 보호하려면 슬라이싱(b = a[:])이나 copy.deepcopy()를 사용해야 합니다.
풀이

1) 리스트 a와 b의 결과:

•
list는 가변 객체(Mutable)입니다. b = a는 리스트를 새로 복사하지 않고 [10, 20] 객체의 메모리 주소를 공유합니다.
•
따라서 b.append(30)으로 해당 객체에 30을 추가하면, 같은 객체를 바라보는 a와 b 모두 [10, 20, 30]이 됩니다.

2) 문자열 s1의 결과:

•
str은 불변 객체(Immutable)입니다. s2 = s2 + ' World'를 실행하면 기존 'Hello' 객체를 수정할 수 없으므로 새로운 문자열 객체 'Hello World'를 만들어 s2의 이름표만 새 객체로 옮깁니다.
•
따라서 원본 s1은 전혀 영향을 받지 않고 그대로 'Hello'를 유지합니다.
3

파이썬 4대 컬렉션 자료형 특징 및 연산 성능 비교

적절한 기본 자료형 선택 하나가 알고리즘 실행 시간을 수천 배 단축시킵니다.

•
list (동적 배열): 순서(인덱스)가 있고 중복 허용. 인덱스 조회 O(1)O(1), append/pop() O(1)O(1), 포함 여부 검사(x in list)는 처음부터 끝까지 찾으므로 O(N)O(N) 소요.
•
tuple (불변 시퀀스): 소괄호 (1, 2) 사용. 수정이 불가능하고, 딕셔너리의 복합 키(예: 좌표 (r, c))로 쓰려면 모든 원소가 해시 가능해야 합니다.
•
dict (해시 테이블): {Key: Value} 쌍 저장 (Python 3.7+부터 입력 순서 보장). 키를 통한 조회·삽입·삭제 및 k in dict 검사 모두 평균 O(1)O(1)!
•
set (해시 집합): 중복을 허용하지 않고 순서가 없는 원소 모음. 중복 제거와 교집합(&)·합집합(|)·차집합(-) 연산 및 원소 존재 확인(x in set)이 평균 O(1)O(1)에 수행됨.
학습 도움말
실무 최적화: 해시 가능한 값의 포함 여부를 여러 번 확인할 때는 집합으로 바꾸면 평균 조회 비용을 줄일 수 있습니다. 단, 순서가 필요한지와 모든 원소가 해시 가능한지 먼저 확인하세요.

핵심 요약

  • ✓
    파이썬의 변수는 값을 직접 담는 상자가 아니라 힙 메모리에 생성된 객체의 주소를 가리키는 참조 이름표다.
  • ✓
    불변 객체와 해시 가능성은 별개이며, 튜플은 모든 원소가 해시 가능할 때만 딕셔너리 키나 집합 원소로 쓸 수 있다.
  • ✓
    가변 객체(list, dict, set)는 단순 대입(b = a) 시 메모리 주소를 공유하므로 원본 보존이 필요할 때는 복사(copy/deepcopy)해야 한다.
  • ✓
    원소 존재 여부 확인(in 연산자)은 리스트에서 O(N)이 걸리지만, 해시 기반인 dict와 set에서는 평균 O(1)에 처리된다.

설명 다음에는 직접 풀어 보세요

함께 풀기와 자기 설명을 거쳐 새 문제에 도전해요. 막힌 부분은 보충하고, 다른 날 다시 기억하는지 확인할 수 있어요.

이 단원의 수업 시작하기 →
5문항 연습 세트

프로그래밍 기초 - 변수와 자료형 단원 연습 문제

개념을 읽은 뒤 연습 문제로 이해한 내용을 확인해 보세요. 한 세트는 5문항이며, 답안을 제출하면 정답과 풀이를 볼 수 있습니다.

한 세트 5문항 단계별 상세 해설 시험지 PDF 인쇄 지원

참고 근거와 확인 범위

설명·예제·문제 구성 및 오류 수정 책임: 프리런. 위 자료는 표시한 주제를 확인하거나 더 읽기 위한 근거이며, 외부 기관의 공식 수업이나 감수본을 뜻하지 않습니다.

참고 자료 연결 점검: 2026-11-02. 제작 방식·검수 범위와 수정 기록에서 확인 범위를 볼 수 있습니다. 오류는 상단의 의견 보내기 또는 contact@freelearn.io로 알려 주세요.