BLOG
Tracefield · 02
Tracefield · 01
블로그 · 14
Vibe Audit · 04
Vibe Audit · 03
Vibe Audit · 02
Vibe Audit · 01
출판편집자 · 01
StudyTree · 01
SecurityOps · 02
SecurityOps · 01
AI챗봇 · 04
AI챗봇 · 03
AI챗봇 · 02
AI챗봇 · 01
퍼플심 · 04
퍼플심 · 03
퍼플심 · 02
퍼플심 · 01
블로그 · 13
rootscan · 07
rootscan · 06
블로그 · 12
블로그 · 11
블로그 · 10
블로그 · 09
블로그 · 08
블로그 · 07
블로그 · 06
블로그 · 05
블로그 · 04
블로그 · 03
블로그 · 02
블로그 · 01
rootscan · 05
rootscan · 04
rootscan · 03
asmspeak · 03
asmspeak · 02
rootscan · 02
asmspeak · 01
rootscan · 01
웹보안도구 · 02
웹보안도구 · 01
루트캠프 · 02
루트캠프 · 01
All notes 167
2025-12-14 / 파이썬기초 · 01
가변 객체와 불변 객체
1. 파이썬의 모든 것은 '객체'다
파이썬에서 변수는 값을 담는 상자라기보다, 객체를 가리키는 이름표에 가깝다. 이 개념을 이해해야 참조와 메모리 동작이 자연스럽게 보인다.
a = [1, 2, 3]
b = a # b도 같은 [1, 2, 3] 객체를 가리킴
a.append(4)
print(b) # [1, 2, 3, 4] -> b도 영향을 받음!
2. 가변 객체 (Mutable)
가변 객체는 생성된 뒤에도 내부 상태를 바꿀 수 있는 객체다.
- 종류:
list,dict,set, 사용자 정의 클래스 등 - 특징:
- 값을 바꿔도 메모리 주소(
id())는 그대로인 경우가 많다. - 함수 기본 인자로 둘 때는 주의해야 한다.
def foo(l=[])같은 코드가 대표적인 함정이다.
- 값을 바꿔도 메모리 주소(
3. 불변 객체 (Immutable)
불변 객체는 한 번 만들어지면 내부 상태를 직접 바꿀 수 없는 객체다.
- 종류:
int,float,str,tuple - 특징:
- 값을 바꾸는 것처럼 보여도 실제로는 새 객체를 만들어 다시 할당한다.
- 해시 가능하므로 딕셔너리 키나 집합 요소로 쓸 수 있다.
4. is와 ==의 차이
이 차이를 이해하면 가변 객체와 참조 문제가 훨씬 덜 헷갈린다.
==: 값이 같은지 비교한다.is: 같은 객체를 가리키는지, 즉 참조가 같은지 비교한다.
a = [1, 2, 3]
b = [1, 2, 3]
print(a == b) # True (내용물은 같음)
print(a is b) # False (서로 다른 주소에 생성된 별개의 리스트)

