티스토리 뷰

 파이썬에서 하나의 값을 갖는 일반적인 변수의 경우 간단하게 복사를 할 수 있지만, 리스트와 같은 경우는 복사 후 값을 변경하면서 생각지 못했던 상황에 맞닥뜨릴 수 있다.

 

 (1) 아래에 a의 경우 b가 a를 복사한 후 b의 값을 2로 변경해도 a의 값은 1로 유지가 된다.

 (2) l1의 경우 l2가 l1을 복사한 후 첫번째 요소를 4로 변경 후 l1을 출력하면 l1의 첫번째 요소 역시 4로 변경된 것을 확인할 수 있다.

 (3) String의 경우도 (1)과 같다. String의 경우 역시 t를 변경돼도 s가 "abc" 유지되는 것을 확인할 수 있다.

 

 여기서 알아 두어야 하는 점은 int와 String은 immutable한 객체로 새로운 값이 할당되면 새로운 주소와 함께 갱신이 되기에 값을 복사한 객체가 변경돼도 복사를 당한 기존 객체는 유지된다는 것이다. 하지만 list의 경우 아래와 같은 복사 방식은 얕은 복사(Shallow copy)로 l2는 l1의 주소를 복사한 것이기에 같은 주소를 갖고 있는 객체 중 하나의 값이 갱신되면 나머지 역시 함께 갱신된다는 것을 알고 있어야한다. 이를 원치 않고 단순히 저장된 값만 복사하고 싶은 경우 깊은 복사(Deep copy)를 통해 복사를 해야한다.

a = 1
b = a
b = 2
print(a) # 1

l1 = [1, 2, 3]
l2 = l1
l2[0] = 4
print(l1) # [4, 2, 3]

s = "abc"
t = s
t += "d"
print(s) # abc

 

 

list mutable 한 순서가 있는 객체 집합 mutable
set mutable 한 순서가 없는 고유한 객체 집합 mutable
dict key와 value가 맵핑된 객체, 순서 없음 mutable
bool 참,거짓 immutable
int 정수 immutable
float 실수 immutable
tuple immutable 한 순서가 있는 객체 집합 immutable
str 문자열 immutable
frozenset immutable한 set immutable

 

참고

- https://wikidocs.net/16038

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함
반응형