일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- SCM
- Basic
- 비트코인
- trading view
- Python
- Data Structure
- 트리
- 숫자
- #선물 #비트코인#알트코인#매매#코인#마진
- 바이낸스
- 전위
- 기초
- C++
- template
- Windows
- 알고리즘
- 순회
- 이진 탐색 트리
- 선물
- 후위
- 템플릿 함수화
- linked list
- 문자열
- mutable
- 연결 리스트
- Tree
- array
- BST
- 자료구조
- 오버로딩
Archives
- Today
- Total
Project Hub
얕은 복사와 깊은 복사 본문
728x90
반응형
이전 글
2022.10.03 - [Python/기초 개념] - 숫자
숫자
파이썬 자료구조와 알고리즘 책 내용을 정리 1.1 정수 int 로 나타냄. 불변형 (immutable) 정수의 크기는 컴퓨터의 메모리 크기에 의해 제한된다. 적어도 32비트 정수를 나타내는 데 필요한 바이트 수
projecthub.tistory.com
Mutable & Immutable
아래의 내용은 이전 글에서 정리를 했으니 참고하면 된다.
2022.08.15 - [Python/기초 개념] - mutable object & immutable object
mutable object & immutable object
객체 Python 의 모든 데이터 타입은 객체(object)다. 객체에는 가변객체(mutable)와 불변객체(immutable)가 있다. 객체에는 3가지 특성인 값, 유형, 정체성이 있다. 값(Value): 가변 객체는 값이 변할 수 있
projecthub.tistory.com
Mutable
- 수정 가능한 객체
Immutable
- 수정 불가능한 객체
list | mutable |
set | mutable |
dict | mutable |
bool | immutable |
int, float | immutable |
tuple | immutable |
str | immutable |
얕은 복사와 깊은 복사
얕은 복사 (shallow copy)
- 변수를 복사했지만 참조하는 곳은 동일 즉 같은 변수를 가리키고 있는 것.
사용 방법
- 반복문을 통해 새로운 mutable 객체에 값 대입
- 리스트 슬라이싱을 사용한 복사
- copy 라이브러리 사용
import copy
# 얕은 복사
# 반복문 사용
def shallow_copy_use_for():
original = [1, 2, 3, 4, 5]
new = []
for item in original:
new.append(item)
print(new)
# 리스트 슬라이싱 사용
def shallow_copy_use_slice():
original = [1, 2, 3, 4, 5]
new = original[:]
print(new)
# copy 라이브러리 사용
def shallow_copy_use_copy():
original = [1, 2, 3, 4, 5]
new = copy.copy(original)
print(new)
깊은 복사
- 내부에 있는 객체 모두 새롭게 만듬
사용 방법
- deepcopy 라이브러리 사용
- .copy() 함수 사용
immutable in mutable
- immutable 객체들을 담고 있는 mutable 객체에 얕은 복사를 사용할 경우 문제 없음.
- 새롭게 대입된 immutable 객체는 기존의 immutable 객체와 같은 주소를 가지지만, immutable 객체의 수정이 불가능한 특생 때문
mutable in mutable
- 얕은 복사는 mutable 객체가 담고있는 내부의 객체들을 복사하지 않기 때문에 mutable in mutable의 경우 완전한 복사가 이루어지지 않는다.
# immutable in mutable
def immutable_in_mutable():
original = [1, 2, 3, 4, 5]
new = original[:]
new[0] = 10
# original: 1,2,3,4,5
# new: 10,2,3,4,5
# mutable in mutable
def mutable_in_mutable():
original = [[1, 2], [3, 4], [5, 6]]
new = original[:]
#new[0].append(7) - .append() 함수를 이용하면, 얕은 복사이기 때문에 original 과 new 모두 변경된다.
#new[0] = [7, 8] - new의 값만 변경된다.
#new[0][0] = 7 - 모두 변경된다.
print(id(original), id(new))
for i in range(0, len(original)):
print(id(original[i]), id(new[i]))
print(original)
print(new)
728x90
반응형
'Python > 기초 개념' 카테고리의 다른 글
문자열 패킹과 언패킹 (0) | 2022.10.14 |
---|---|
문자열 (0) | 2022.10.14 |
숫자 (3) | 2022.10.03 |
mutable object & immutable object (0) | 2022.08.15 |
Comments