파이썬의 변수와 동작 방식
파이썬에서의 변수는 "객체를 가리키는 이름(참조)"

- x = 10 이라는 코드를 실행하면, 10이라는 정수 객체 메모리(Heap) 영역에 먼저 생성.
- 변수 x 는 그 10 이라는 개체가 있는 메모리 주소를 "참조(Reference)"하게 됨.
- 이러한 연결 정보는 내부적으로 네임스페이스(Namespace)라는 딕셔너리(dict) 구조에 저장되어 관리됨.
💡 전역 네임스페이스 확인하기 : globals()
파이썬 내장 함수인 globals()를 사용하면 현재 전역 범위에 정의된
변수, 함수 등의 이름과 실제 객체의 매핑 정보를 딕셔너리 형태로 직접 확인할 수 있다.
예시
# 1. 변수 값 변경 (참조하는 대상을 바꾸는 것)
name = '김사과'
age = 20
print(name) # 김사과
print(age) # 20
name = '반하나' # 'name'이라는 이름이 '반하나' 객체를 새로 가리킴
print(name) # 반하나
# 2. 객체의 고유성 비교 (is 연산자와 id 함수)
a = 200
b = 200
print(a) # 200
print(b) # 200
print(a is b) # True (is : 두 변수가 같은 객체를 가리키는지 고유성 비교)
print(id(a)) # (id : 객체의 고유 메모리 주소 반환)
print(id(b)) # (파이썬은 효율성을 위해 작은 정수를 재사용)
변수 이름을 지을 때 꼭 지켜야 하는 규칙
- 사용 가능 문자 : 알파벳(대/소문자), 숫자, 밑줄( _ ) 로 구성될 수 있다.
- 숫자 시작 금지 : 문자로 시작해야 하며, 숫자로 시작 할 수 없다. (예 : 1apple X, apple1 O)
- 공백 포함 금지 : 띄어쓰기 대신 밑줄( _ )을 사용. (예 : user name X, user_name O)
- 예약어 사용 금지 : 파이썬이 이미 문법적으로 예약해 둔 단어(if, for, class, def, True, False 등)는 변수 이름으로 사용할 수 없음.
파이썬의 다양한 자료형
파이썬은 변수에 값을 넣을 때 자동으로 데이터의 종류를 판단하는 동적 타입 언어이다. 자료형은 크게 '기본 자료형'과 '집합형 자료형' 으로 나뉜다.
① 기본 자료형 (Primitive Data Types)
| 자료형 | 설명 | 예시 |
| 정수형 (int) | 소수점이 없는 숫자 | 10, -3, 0 |
| 실수형 (float) | 소수점이 있는 숫자 | 3.14, -0.5 |
| 문자열형 (str) | 글자들의 집합(큰따옴표나 작은따옴표 사용) | "hello", '파이썬' |
| 불린형 (bool) | 참과 거짓을 나타내는 값 | True, False |
# 기본 자료형 예시
name = '김사과'
age = 20
weight = 50.5
isLover = False
print(type(name)) # <class 'str'>
print(type(age)) # <class 'int'>
print(type(weight)) # <class 'float'>
print(type(isLover)) # <class 'bool'>
② 집합형 자료형 (Collection Types)
| 자료형 | 설명 | 예시 |
| 리스트(list) | 여러 값을 순서대로 저장하며, 값의 중복을 허용하고 수정이 가능. [ ] 사용 | [10, 20, 30, 10] |
| 튜플(tuple) | 리스트와 유사하지만, 한 번 생성하면 값을 수정할 수 없음. ( ) 사용 | (10, 20, 30, 10) |
| 딕셔너리(dict) | 키(Key)와 값(Value)이 쌍을 이루는 구조로 저장. { } 사용 | {"no":1, "userid":"apple"} |
| 집합(set) | 순서가 없고, 중복을 허용하지 않는 값들의 모음. { } 또는 set( ) 사용 | {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 문을 사용하면 지정한 변수(이름)를 삭제한다. 이때 주의할 점은 "변수 이름(참조)이 삭제되는 것일뿐, 객체 자체가 즉시 삭제되는 것은 아니다"
isLover = False
del isLover
print(isLover)
# 에러발생 : name "isLover" is not defined
name1 = '김사과'
name2 = name1 # name2도 '김사과' 객체를 바라보게됨
del name1 # name1이라는 이름만 삭제됨
print(name2) # '김사과' 라는 값이 출력.
가비지 컬렉션 (Garbage Collection, GC)
파이썬에는 가비지 컬렉터(Garbage Collector)가 내장되어 있음. 프로그램이 실행되는 동안 어떤 객체를 참조하는 변수의 개수 (Reference Count)가 0이 되면, 가비지 컬렉터가 자동으로 메모리에서 제거해 준다.
컴퓨터에서 문자를 저장하는 방법
컴퓨터는 문자를 글자 그대로 저장하는 것이 아니라, 각 문자에 대응되는 숫자 코드로 변환하여 저장한다.
이러한 변환 규칙을 문자 인코딩이라 하며, 대표적으로 ASCII와 Unicode가 있다.
① 아스키 코드 (ASCII)
- 정의 : 미국에서 개발한 가장 기초적인 문자 인코딩 표준
- 특징 : 7비트(Bit)를 사용하여 총 128개의 문자(0~127번)를 표현. 영어 알파벳 대소문자, 숫자, 특수문자가 해당.
- 한계 : 영어만 표현하기엔 충분하지만, 한글이나 한자, 아랍어 같은 전 세계 다양한 언어를 담기엔 턱없이 부족.
② 유니코드 (Unicode)
- 정의 : 전 세계 모든 나라의 문자와 기호에 고유한 번호(코드 포인트)를 부여한 글로벌 표준.
- 특징 : UTF-8, UTF-16, UTF-32가 있으며, 이들은 문자를 서로 다른 바이트 길이로 표현.
- UTF-8(가변 길이 인코딩) : 현재 웹과 프로그래밍에서 가장 널리 쓰이는 방식. 영어는 효율적으로 1바이트, 한글 같은 문자는 여러 바이트(보통 3바이트)로 다르게 변환하여 저장 효율성이 뛰어남.
컴퓨터의 용량 단위
- 컴퓨터는 데이터를 0과 1 (bit)로 저장.
- 8bit = 1Byte 이며, 이것이 데이터를 저장하는 기본 단위.
- 컴퓨터는 2진수 기반이기 때문에 용량 단위가 1000이 아닌 1024 배수 기준으로 증가.

파이썬의 문자열
파이썬에서 문자열은 작은따옴표( ' )나 큰따옴표( " )로 감싸서 표현하며, 내부적으로는 유니코드 기반의 객체로 저장.
📌 성질 1 : 리터럴 공유 (Literal Sharing)
파이썬은 메모리를 아끼기 위해 동일한 문자열 리터럴을 여러 번 사용하면, 메모리에 객체를 새로 만들지 않고 하나의 객체를 여러 변수가 함께 참조하도록 만든다.
📌 성질 2 : 문자열은 불변(Immutable)
한 번 생성된 문자열 객체의 내부 값은 절대로 수정할 수 없다.
a = "Hello"
b = "Hello"
print(a is b)
# True (동일한 메모리 주소의 객체를 가리킴)
my_string = "Hello"
# my_string[0] = "h" # X TypeError 에러 발생. 값을 직접 바꿀 수 없음.
# 값을 바꾸고 싶다면 완전히 새로운 문자열 객체를 생성해서 대입해야 함.
a = "Hello"
a = a + ", python!" # 새로운 문자열 객체 생성
text = "Hello"
print(id(text)) # 이전 문자열 객체의 메모리 주소 출력
text = "Python" # 변수에 새로운 문자열 할당
print(id(text)) # 새로운 문자열 객체의 메모리 주소 출력
문자열 연산과 인덱싱 / 슬라이싱
① 문자열 기본 연산
파이썬은 문자열끼리 더하거나, 숫자를 곱해 반복할 수 있다.
# 1. 문자열 길이 확인 (공백 포함)
text = "Hello, Python!"
print(len(text)) # 14
# 2. 문자열 더하기 (연결)
name = "김사과"
age = "20살"
print(name + ", " + age) # 김사과, 20살
# 3. 문자열 곱하기 (반복)
print("🎈" * 5) # 🎈🎈🎈🎈🎈
② 인덱싱(Indexing)과 슬라이싱(Slicing)
인덱싱(Indexing)
- 순서가 있는 자료형(리스트, 문자열, 튜플 등)에서 인덱스 값을 이용해 특정 위치의 요소에 접근하는 방법.
- Python은 인덱스가 0부터 시작하며, 데이터[인덱스] 형태로 원하는 값을 조회.
- 음수 인덱스를 사용하면 뒤에서부터 요소에 접근 가능.
슬라이싱(Slicing)
- 순서가 있는 자료형(리스트, 문자열, 튜플 등)에서 인덱스 범위를 지정하여 원하는 부분만 추출하는 방법.
- Python은 데이터[start:end] 형태로 사용하며, start 인덱스부터 end 이전 인덱스까지의 요소를 반환.
- 필요에 따라 step 값을 추가해 간격을 지정할 수 있음.
str = '문자열 내부의 문자에 인덱스를 사용하여 접근하거나 슬라이스할 수 있습니다.'
print(str)
# 인덱싱
print(str[0]) # 문
print(str[1]) # 자
print(str[12]) # 인
print(str[-1]) # .
print(str[-2]) # 다
# 슬라이싱
print(str[0:6]) # 문자열 내부
print(str[8:16]) # 문자에 인덱스를
print(str[:16]) # 문자열 내부의 문자에 인덱스를
print(str[8:]) # 문자에 인덱스를 사용하여 접근하거나 슬라이스할 수 있습니다.
문자열 메서드 (Methods)
문자열 메서드는 문자열 객체에 적용되는 함수로, 문자열을 조작하거나 변환하는 다양한 작업을 수행할 수 있게 해준다.
💡 함수와 메서드의 차이
| 함수 | 메서드 |
| 특정 작업을 수행하기 위해 독립적으로 존재하는 코드 블록 | 클래스나 객체에 종속되어 해당 객체의 상태를 조작하거나 특정 행동을 수행하는 함수. |
| len(), print(), id() 등 | 문자열.upper(), 문자열.lower(), 문자열.count() 등 |
1. 대소문자 변환 ( upper, lower, swapcase )
text = "Hello, Python!"
print(text.upper()) # HELLO, PYTHON! (대문자로)
print(text.lower()) # hello, python! (소문자로)
print(text.swapcase()) # hELLO, pYTHON! (대문자는 소문자로, 소문자는 대문자로)
2. 글자 수 세기 ( count )
text = "Hello, Python!"
print(text.count('l')) # 2 ('l'이 몇 번 나왔는지)
print(text.count('ll')) # 1 ('ll' 묶음이 몇 번 나왔는지)
'''
문자열.count(x)는 문자열 전 범위에서 x가 등장하는 횟수를 반환하는 메서드.
문자열.count(x, start)는 문자열 start index 부분에서부터 시작해서 문자열 끝까지
x가 등장하는 횟수를 반환하는 메서드.
문자열.count(x, start, end)는 문자열 start index 부분에서 end index 부분까지의
부분 문자열에서 x가 등장하는 횟수를 반환하는 메서드.
'''
3. 위치 찾기 ( find, rfind )
text = "Hello, Python!"
print(text.find('l')) # 2 (앞에서부터 찾은 첫 'l'의 인덱스)
print(text.rfind('l')) # 3 (뒤에서부터 찾은 첫 'l'의 인덱스)
print(text.find('z')) # -1 (존재하지 않으면 -1 반환)
print(text.find('o', 5)) # 11 (5번째 인덱스 이후에 "o"의 인덱스)
4. 문자열 바꾸기 ( replace )
text = "Hello, Python!"
print(text.replace("Python", "World")) # Hello, World!
5. 문자열 공백 제거 ( strip, lstrip, rstrip )
text = " Hello, Python! "
print(text.strip()) # "Hello, Python!" (양쪽 공백 제거)
print(text.lstrip()) # "Hello, Python! " (문자열의 왼쪽 공백 제거)
print(text.rstrip()) # " Hello, Python!" (문자열의 오른쪽 공백 제거)
# 회원가입 DB나 불필요한 공백이 생겼을때 사용.
6. 문자열 분리 ( split )
text = '김사과 반하나 오렌지 이메론'
names = text.split() # 공백을 기준으로 분리
print(names)
# ['김사과', '반하나', '오렌지', '이메론']
text = '김사과,반하나,오렌지,이메론'
names = text.split(',') # ','을 기준으로 분리
print(names)
# ['김사과', '반하나', '오렌지', '이메론']
text = '김사과, 반하나, 오렌지, 이메론'
names = text.split(', ') # ', '를 기준으로 분리
print(names)
# ['김사과', '반하나', '오렌지', '이메론']
7. 문자열 결합 ( join )
city = "서울시"
district = "강남구"
street = "역삼동"
address = ' '.join((city, district, street))
print('주소:', address)
# 주소: 서울시 강남구 역삼동
str1 = "😎".join(("파이썬", "자바", "자바스크립트"))
print(str1)
print(type(str1))
# 파이썬😎자바😎자바스크립트
# <class 'str'>
8. 접두사와 접미사 확인 ( startswith, endswith )
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
9. 그 외의 문자열 메서드
# capitalize() (첫 문자만 대문자로 변경하고 나머지 문자열은 모두 소문자로 변경)
text = "hello PythOn!"
print(text.capitalize()) # Hello python!
# title() (각 단어의 앞 문자를 대문자로 바꿔주고 다른 문자들은 소문자로 변경)
text = "hello pYTHON!"
print(text.capitalize()) # Hello Python!'Python' 카테고리의 다른 글
| 리스트의 함수와 메서드 (0) | 2026.05.22 |
|---|---|
| 컬렉션 타입 (리스트) (0) | 2026.05.22 |
| 연산자 (0) | 2026.05.22 |
| 파이썬의 입력과 출력 (0) | 2026.05.22 |
| Python 시작과 개발환경 구축, 하드웨어와 메모리 (0) | 2026.05.20 |