본문 바로가기
프로그래밍/Python

개체복사

by leestun 2020. 8. 5.
반응형

1) 단순개체복사

x = 3
y = x

참조변수는 객체의 값의 주소를 저장하고
y=x 를 한다면 x와 y 가 서로 다른 주소에 3을 저장하는 것이
아니라, x와 y가 같은 주소에 있는 3을 가리키고 있다.

-> 단일값 일때는 문제가 없다
단일값: 한개의 값

-> 다중값 일 때 문제가 발생
다중값일 때 단순객체복사를 한다면, 한 값이 변경되면, 다른값도 변경된다.
——————————————————————————————————

2) 얕은복사(shallow copy)

객체를 복사할때, 새로운 리스트를 생성해서, 요소를 복사한다.

얕은복사 방법

b =a.copy()


-> 얕은 복사의 문제
컬렉션이 이중으로 이뤄져있을때,
컬렉션의 요소가 컬렉션일 때 문제 발생

#얕은복사

a=[1,2,3,4]
b=a.copy()
b[2] = 100
'''
print(a)
print(b)
'''

#얕은복사 문제점
a =[1,[2,3,4],5,6,]
b = a.copy()
b[1][0]=100
print(a)
print(b)

————————————————————————————————

3) 깊은복사(deep copy)

컬렉션을 새롭게 생성하고
그 내부의 요소까지 재귀적으로 새롭게 생성

<사용방법>
import copy
b = copy.deepcopy(a)

<실습>깊은복사.py

#깊은복사.py
import copy

a=[1,[2,3,4,],5,6]
#b=a.copy() 얕은복사
b = copy.deepcopy(a)

b[1][0]=100
print(a)
print(b)


*정리
1. 단순객체복사는 모든 값이 동일한 객체
2. 얕은복사는 컬렉션만 새롭게 생성하고 내부요소는 동일한 객체
3. 깊은 복사는 컬렉션과 내부 요소를 재귀적으로 모두 생성하는 다른 객체

---------------------------------------------------------------------


반응형

'프로그래밍 > Python' 카테고리의 다른 글

모듈과 패키지  (0) 2020.08.16
예제- 전화번호부  (0) 2020.08.12
오버라이딩  (0) 2020.08.04
상속  (0) 2020.08.04
리스트 컴프리헨션  (0) 2020.08.02