2026. 5. 21. 17:13ㆍKDT/1. Python
# 변수
- 프로그램에서 데이터를 저장하기 위해 사용하는 이름
- 메모리에 저장된 값을 참조
- 값을 직접 다루는 대신 변수 이름을 통해 데이터를 읽고 변경
- 프로그램 실행 중 값이 변할 수 있다는 특징을 가짐
-> 이를 통해 데이터를 효율적으로 관리하고 재사용
a = "memory"

1. Python의 변수 동작 방식
x = 10
- 10이라는 객체를 메모리(heap)에 생성
- x는 그 객체를 "참조(reference)"함
- 숫자, 문자열, 리스트 등 모든 객체는 heap에 저장됨
- 변수(이름)은 객체를 가리키는 참조이며 내부적으로는 네임스페이스(딕셔너리 구조)에 저장됨
- 정보 덩어리인 '객체'를 생성
# 네임스페이스(dict 객체) 확인
print(globals())
*메모리 영역은 아래와 같이 나뉜다 (RAM)
1. Code 영역 : 실행할 프로그램의 코드가 저장되는 영역 (=텍스트 영역)
2. Data 영역 : 전역 변수와 정적 변수가 저장되는 영역. 프로그램 종료 시 소멸
3. Heap 영역 : 데이터를 지울 때까지 존재 (RAM이니까 종료 시 소멸). 프로그래머가 직접 공간 할당, 해제하는 공간
4. Stack 영역 : 프로그램이 자동으로 사용하는 임시 메모리 영역. 함수 호출 시 생성되는 지역변수와 매개 변수가 저장. 함수 호출이 완료되면 소멸
*overflow : heap overflow, stack overflow
말 그대로 한정된 메모리 공간이 부족하여 메모리 안의 데이터가 넘쳐 흐르는 현상
heap은 메모리 위쪽 주소부터, stack은 메모리 아래쪽 주소부터 할당되기 때문에 각 영역이 상대 공간을 침범하는 일이 발생
- globals()
- 현재 실행 중인 모듈의 전역 네임스페이스를 나타내는 딕셔너리를 반환하는 내장 함수
- 이 딕셔너리를 통해 전역 변수에 접근하거나 조회, 수정 가능
- 메모리에서 사용되고 있는 모든 내용 저장
name = '김사과'
age = 20
print(name)
print(age)
name = '반하나'
print(name)
a = 200
b = 200
c = 100
print(a)
print(b)
print(a is b) # is 연산자 : 파이썬에서 객체의 동일성을 비교하는 연산자
print(id(a)) # id() 함수 : 파이썬 내장 함수로, 주어진 객체의 고유한 메모리 주소를 반환
print(id(b))
print(id(c))
2. 변수 이름 작성하는 방법
- 변수 이름은 알파벳(대문자 or 소문자), 숫자, 밑줄(_)로 구성
- 숫자로 시작 불가능
- 공백 포함 불가능 (대신 밑줄 사용)
- 예약어는 변수 이름으로 사용 불가능 (ex. if, for, class, def 등)
# 자료형
- 파이썬의 자료형은 데이터를 저장하고 처리하기 위한 값의 종류
- 파이썬은 동적 타입 언어이기 때문에, 변수에 값을 넣으면 자동으로 자료형 결정
1. 기본 자료형 4가지 (Primitive Data Types)
- 정수형 (int)
- 실수형 (float)
- 문자열형 (Str) : 글자들의 집합. 큰따옴표(")나 작은따옴표(') 둘 다 사용 가능
- 불린형 (bool) : True or False 값을 가짐. 조건문 등에 많이 사용
(정수형과 실수형은 숫자형이다)
name = '김사과'
age = 20
weight = 50.5
isLover = False
print(name)
print(age)
print(weight)
print(isLover)
print(type(name))
print(type(age))
print(type(weight))
print(type(isLover))
2. 집합형 자료형 (Collection Types)
- 리스트 (list) : 여러 값을 순서대로 저장. [ ] 사용. 중복값 허용. 수정 가능.
ex. [1, 2, 3, 1] - 튜플 (tuple) : 리스트처럼 여러 값 저장. ( ) 사용. 중복값 허용. 수정 불가능.
ex. (1, 2, 3) - 딕셔너리 (dict) : 키(key)와 값(value) 쌍으로 저장. { } 사용. 순서 보장. 키는 중복 불가능.
ex. {"no":1, "userid":"apple", "name":"김사과"} - 집합 (set) : 중복 없는 값들의 모음. { } 또는 set( ) 사용. 중복값 알아서 삭제. 순서 없음. 인덱싱 불가
ex. {10, 20, 30}
# 자료형 변환 (Type Casting)
- 자료형 변환은 하나의 데이터 타입을 다른 타입으로 바꾸는 것
- 데이터 형태를 상황에 맞추기 위해 사용
# 1. 정수형 > 실수형
a = 10
b = float(a) # 10.0
# 2. 실수형 > 정수형
c = 3.14
d = int(c) # 3
# 3. 문자형 > 정수형, 실수형
e = "100"
f = int(e) # 100
g = float(e) # 100.0
# 4. 정수형/실수형 > 문자형
h = 42
i = str(h) # "42"
j= 3.14
k = str(j) # "3.14"
# 변수 삭제하기
- 변수를 삭제하기 위해 del문 사용
- 지정된 변수를 제거하고 해당 메모리 공간 해제
- 변수가 삭제되면 해당 이름으로 변수에 더 이상 접근 불가능
- 주의 : del문을 사용하여 변수를 삭제할 때 해당 변수에 연결된 메모리가 해제되지만,
변수가 참조하던 값 자체는 삭제되지 않음
- 가비지 컬렉션 (Garbage Collection)
- 파이썬에서는 변수가 객체를 만들면, 그 값은 힙(heap) 영역에 저장됨
- 하지만 프로그램을 계속 실행하면서 더 이상 사용하지 않는 객체들이 쌓이면 메모리 낭비 발생
- 가비지 컬렉터(GC)가 작동하여 쓸모없는 객체를 찾아서 자동으로 메모리에서 제거
(파이썬 내부에서 메모리를 타고 다니며 reference count가 0인 애들을 삭제함.
바로 호출 가능하지만 굳이? 메모리 영역이 넓어서 언제 삭제될지는 모름)
# 컴퓨터에서 문자를 저장하는 방법
1. 아스키코드 (ASCII Code)
- American Standard Code for Information Interchange
- 미국에서 개발된 문자 인코딩 표준
- 7bit로 구성. 총 128개의 문자 (0~127) 표현

2. 유니코드 (UniCode)
- 전 세계의 다양한 문자와 기호를 포함하기 위해 개발된 표준
- 유니코드는 각 문자를 고유한 코드 포인트로 표현
- 다양한 인코딩 방식 (UTF-8, UTF-16, UTF-32 등) 지원
- UTF (Unicode Transformation Format)
- 유니코드 문자 집합을 실제 byte형태로 변환하는 인코딩 방식
- UTF-8, UTF-16, UTF-32 중 UTF-8은 가변 길이 인코딩 방식으로
영어는 1byte, 한글 같은 문자는 여러 byte로 표현
저장 효율성과 호환성이 뛰어나 현재 가장 널리 사용되는 방식
3. 컴퓨터의 용량 단위
- 컴퓨터는 데이터를 0, 1로 저장
- 8bit 가 1byte이며 이것이 기본 단위
- 컴퓨터는 2진수 기반익리 때문에 용량 단위는 1024 기준으로 증가

# 파이썬의 문자열
- 문자열(String)은 문자들의 순서 있는 집합
- 텍스트 데이터를 표현하기 위해 사용되는 자료형
- 큰따옴표(") 또는 작은따옴표(')로 표현
- 내부적으로는 문자를 숫자로 변환한 유니코드 기반 객체로 저장
- 인덱스를 통해 각 문제 접근 가능
- 수정이 불가능한 immutable 특성
my_string = "Hello"
my_string[0] = "h" # 오류 발생!
my_string = "hello" #전체를 다시 저장
- 연걸, 슬라이싱, 길이 확인 등 다양한 연산 지원
1. 인덱스 (Index)
- 데이터 구조에서 각 요소의 위치를 나타내는 번호
- 리스트나 문자열과 같이 순서가 있는 자료형에서 특정 값을 찾거나 접근할 때 사용
- 인덱스는 0부터 시작
- 음수 인덱스로 뒤에서부터 접근 가능
2. 리터럴 공유 (Literal sharing)
- 동일한 값을 가지는 불변 객체(정수, 문자열 등)를 여러번 사용할 때
파이썬이 메모리 효율을 위해 하나의 객체만 생성하고 여러 변수가 이를 함께 참조하는 동작
a = "Hello"
a = a + ", python!" # 새로운 문자열 객체 생성
text = "Hello"
print(id(text)) # 이전 문자열 객체의 메모리 주소 출력
text = "Python" # 변수에 새로운 문자열 할당
print(id(text)) # 새로운 문자열 객체의 메모리 주소 출력
# 문자열 함수와 연산자
1. 문자열 길이 확인하기
text = "Hello, Python!"
print(len(text))
2. 문자열 합치기
name = "김사과"
age = "20살"
message = name + ", " + age
print(message)
3. 문자열 반복하기
apple = "🍎" * 10
print(apple)
4. 문자열 인덱싱과 슬라이싱
- 인덱싱 (Indexing) : 순서 있는 자료형(list, string, tuple 등)에서 인덱스 값을 이용해 특정 위치의 요소에 접근
- 슬라이싱 (Slicing) : 순서 있는 자료형(list, string, tuple 등)에서 인덱스 범위를 지정하여 원하는 부분만 추출
str1 = '문자열 내부의 문자에 인덱스를 사용하여 접근하거나 슬라이스할 수 있습니다.'
print(str1)
# 인덱싱
print(str1[0])
print(str1[1])
print(str1[12])
print(str1[-1])
print(str1[-2])
# 슬라이싱
print(str1[0:6])
print(str1[8:16])
print(str1[:16])
print(str1[8:])
# 문자열 메서드
- 문자열 객체에서 적용되는 함수로, 문자열을 조작하거나 변환하는 다양한 작업 수행 가능
- 함수? 메서드?
함수 : 누구나 사용 가능 / 메서드 : 주체 있음
- 함수? 메서드?
1. 대소문자 변환
text = "Hello, Python!"
print(text.upper())
print(text.lower())
2. 특정 문자열의 등장 횟수 확인
text = "Hello, Python!"
print(text.count('l'))
print(text.count('ll'))
3. 특정 부분 문자열의 첫 번째 등장 위치(index) 확인
text = "Hello, Python!"
print(text.find('l'))
print(text.find('ll'))
print(text.find('z')) # 없으면 -1
print(text.rfind('l')) # 뒤에서부터
print(text.find('o', 5)) # idx 5 이후에 있는 'o'를 찾아줘
4. 문자열 대체
text = "Hello, Python!"
new_text = text.replace("Python", "World")
print(new_text)
5. 문자열 양쪽 공백 제거
text = " Hello, Python! "
print(text)
print(text.strip())
6. 문자열 분리
text = '김사과 반하나 오렌지 이메론'
names = text.split() # 공백을 기준으로 분리 -> 리스트로
print(names)
text = '김사과,반하나,오렌지,이메론'
names = text.split(',') # ','을 기준으로 분리
print(names)
7. 문자열 결합
city = "서울시"
district = "강남구"
street = "역삼동"
address = ' '.join((city, district, street))
print('주소:', address)
str1 ="😎".join(("파이썬", "자바", "자바스크립트")) # join의 결과 = string
print(str1)
8. 접두사와 접미사 확인
text = "Hello, Python!"
starts_with_hello = text.startswith("Hello")
ends_with_world = text.endswith("World!")
print(starts_with_hello) # True
print(ends_with_world) # False
* 마크다운 -> 코드 : esc - y
* 코드 -> 마크다운 : esc - m
* 코드 셀에 입력시 길어져 가로 스크롤 생성됨
-> file - preferences - wrap 검색 - word wrap을 on으로 설정
[3일차 수업 후기]
파이썬이라는 언어를 어느정도 다뤄보았고, 학교에서도 배웠던 내용들이 많아 아직까지는 큰 어려움은 없다.
하지만 OT 때도 말씀하셨다시피, 속도가 굉장히 빠르게 진행되기 떄문에 긴장을 놓치지 않고 아는 내용이더라도 집중해서 듣는 중이다.
개발 블로그에 대한 조언은 정말 공감한다. 어떤 것을 기록하는 것을 좋아하고 해보았기 때문에 블로그 작성이 나에게 어려운 일은 아니지만 미루다보면 눈덩이처럼 걷잡을 수 없이 커지게 되기 때문에 틈틈이 작성해야한다고 생각한다.
'KDT > 1. Python' 카테고리의 다른 글
| [7일차] 사용자정의함수, 객체지향프로그래밍(캡슐화, 상속) (0) | 2026.05.28 |
|---|---|
| [6일차] 제어문(반복문), 사용자 정의 함수(함수 생성, 전역변수, 지역변수) (0) | 2026.05.27 |
| [5일차] 컬렉션 타입(튜플, 세트, 딕셔너리), 제어문(조건문, 반복문) (0) | 2026.05.26 |
| [4일차] 입출력, 연산자, 컬렉션타입(리스트) (0) | 2026.05.26 |
| [2일차] Python 개발환경 구축 (0) | 2026.05.20 |