딥러닝·머신러닝/Python
Python Numpy Basic 7 (Shallow Copy, Deep Copy)
경이가 꿈꾸는 플랫폼 개발
2021. 10. 31. 17:51
1. Shallow Copy
view(), slicing 사용해서 새로운 array 객체 생성하면 얕은 복사가 된 것
기본적으로 Python에서 Copy는 Shallow : Python의 값들은 값들로서 존재하는 것이 아니고, 주소들로 존재함
주소를 복사한다고 생각하면 됨 → 참조하는 주소 안의 값들은 또 자체적으로 주소를 참조하고 있기 때문에 값 변경되면 복사한 곳에서도 같이 변경된다. 하지만 shape 변화는 영향 못줌.
import numpy as np
a = np.arange(6)
b = a
id(b) == id(a)
# True
b.shape = 2, 3 # shape 변경
a, b
# 둘 다 동일하게
# array([[0, 1, 2],
# [3, 4, 5]])
a = np.arange(6).reshape(3, 2)
b = a.view()
id(a) == id(b)
# False
b.shape = 2, 3 # shape 변경
a, b
# a는
# array([[0, 1],
# [2, 3],
# [4, 5]])
# b는
# array([[0, 1, 2],
# [3, 4, 5]])
id(a[0, 0]) == id(b[0, 0])
# True : 안에 값들은 각각 자신의 주소를 참조하고 있는 것
b = a[:, :] # shallow copy 발생
id(a) == id(b)
id(a[0, 0]) == id(b[0, 0])
# False
# True
2. Deep Copy
완전하게 복사하는 것 (내부까지도 연동 안되고 별도의 사본이 만들어진 것)
a = np.arange(6).reshape(3, 2)
b = a.copy()
id(a), id(b)
b[0, 2] = 100
b, a
# False
# a는 안 바뀜