티스토리 뷰
파이썬에서 하나의 값을 갖는 일반적인 변수의 경우 간단하게 복사를 할 수 있지만, 리스트와 같은 경우는 복사 후 값을 변경하면서 생각지 못했던 상황에 맞닥뜨릴 수 있다.
(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 |
참고
반응형
'기술(Tech, IT) > 파이썬(Python)' 카테고리의 다른 글
[Python] Set(세트) vs List(리스트) 검색 속도 비교 (0) | 2023.06.28 |
---|---|
[Python] TypeError: 'int' object is not subscriptable (0) | 2023.05.11 |
[Python] Two-Dimensional Array(2차원 배열) (0) | 2022.10.07 |
[Python] 문자열 숫자인지 판별 (0) | 2022.10.05 |
[Python] subscriptable: TypeError (0) | 2022.09.28 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- java
- 이코노미스트
- min heap
- machine learning
- tf-idf
- socket programming
- Android
- DICTIONARY
- The Economist Espresso
- 투 포인터
- leetcode
- Hash Map
- ml
- The Economist
- C++
- Computer Graphics
- vertex shader
- 티스토리챌린지
- 딕셔너리
- join
- 이코노미스트 에스프레소
- I2C
- 머신 러닝
- 소켓 프로그래밍
- 오블완
- 리트코드
- Python
- 안드로이드
- defaultdict
- 파이썬
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함
반응형