Notice
Recent Posts
Recent Comments
Link
반응형
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

인공지능 요모조모

[Python3] 변수와 복사(shallow copy, deep copy) 본문

ROKEY/Python3

[Python3] 변수와 복사(shallow copy, deep copy)

dvl.hyeon_ 2025. 2. 4. 11:00
반응형

# ROKEY 3기 Python 강의 복습 겸 기록용으로 남기는 글입니다.

 

✅ 파이썬의 변수(variable)

  • 객체(데이터)를 참조하는 이름표
  • 즉, 변수에 객체 직접 저장 X ➡️ 객체(데이터)에 대한 참조를 저장
    • 👉🏻 a = 1일 때, 변수 a는 1이라는 객체를 가리키는 것 (공간 할당) 

+) 파이썬에서는 자동 메모리 관리 & 가비지 컬렉션 ➡️ 개발자는 메모리 관리 신경 쓸 필요 X


✅ 파이썬의 자료형

구분 예시 특징
숫자형 객체 int, float, bool 한 번 만들어지면 변경되지 않는 불변형(immutable)
시퀀스형 객체 str, tuple, list 유한한 길이를 가지며, 순서가 있는 집단
인덱스를 통해 각 원소에 접근 가능함
집합형 객체 set 중복이 없고, 불변형 객체로 이루어진 집단
순서가 없고, 크기 변경이 가능
맵핑형 객체 dictionary 키(key)와 값(value) 쌍으로 구성
키로 값을 조회하고 변경 가능

 

✅ 불변(immutable)

a = 1
b = a
  • 위의 경우에는 변수 a에 할당된 주소값을 b에게도 동일하게 할당된 상태
  • 그러나 b를 변경한다고 a가 변경되지는 않음 정수형 변수는 immutable하기 때문임
  • int, float, str, tuple은 모두 immutable 객체

✅ 가변(mutable)

c = [1, 2, 3, 4]
d = c
  • 그러나 위의 경우에 d[0] = 1로 변경하는 경우에는 c도 변경되게 됨
  • 왜냐? 리스트형 변수는 mutable하기 때문
  • list, set, dict 모두 mutable 객체
  • 개발자가 작성한 class 또한 mutable 객체로 분류

 

✅ 얕은 복사(shallow copy)

  • 원본 객체의 주소값을 복사하는 것
ca = [10, 11]
cb = ca

print("리스트 ca값은", ca)  # [10, 11]
print("리스트 cb값은", cb)  # [10, 11]

cb[0] = 55

print("리스트 ca값은", ca)  # [55, 11]
print("리스트 cb값은", cb)  # [55, 11]
  • 👉🏻 ca와 cb는 현재 같은 메모리 주소를 바라보는 상황이므로, cb를 변경하면 ca도 함께 변경

✅ 깊은 복사(deep copy)

  • 참조된 객체 자체를 복사하는 것 (객체를 새로운 메모리 공간에 복사)
  • deepcopy, list 생성시 원본 전달, 빈 리스트 생성 후 extend의 매개변수로 원본 전달, 리스트 슬라이싱 등의 방법 사용 가능
ca = "abc"
cb = a

print("문자열 ca값은", ca)  # "abc"
print("문자열 cb값은", cb)  # "abc"

cb = "abcd"

print("문자열 ca값은", ca)  # "abc"
print("문자열 cb값은", cb)  # "abcd"
  • 👉🏻 ca와 cb는 현재 같은 메모리 주소를 바라보는 상황
  • 그러나 cb에 다른 값을 할당하면 재할당이 이루어지므로, 메모리 주소가 변경됨
  • 값 자체를 변경할 수 없는 immutable 성질 때문!
반응형