브렌쏭의 Veritas_Garage

[우리FISA] 2일차 Python Concepts 본문

[Project_하다]/[Project_공부]

[우리FISA] 2일차 Python Concepts

브렌쏭 2024. 7. 9. 18:51

아 윈도우즈 한영변환키에 맥 커멘드 키에 헷갈려서 너무 화가 나

Concepts

Copy :: Deep Copy vs Shallow Copy

얕은 복사

  • 객체를 복사할 때, 객체의 주소값만 복사하는 것
  • 즉, 객체의 주소값만 복사하기 때문에 원본 객체의 변경이 복사본에도 영향을 미침
  • copy() 함수를 사용하면 얕은 복사가 됨
  • copy() 함수는 객체의 주소값만 복사하기 때문에, 객체 내부의 객체는 복사되지 않음
  • 따라서, 내부 객체의 변경이 복사본에도 영향을 미침

변수 이름은 다르지만 결국 동일한 주소를 나타내는 경우

  • 메모리값이 같다 (2개 이상 얼마든지... 메모리값을 참조할 뿐)
  • 공간 효율성, 메모리 효율성 때문
  • 전체 값을 항상 메모리에 복사하면 그만큼 속도가 느려지고 메모리 공간이 부족해질 수 있음
  • 파이썬은 주소를 복사해서 사용을 하는 얕은 복사를 기본 복사로 차용을 하고 있다

깊은 복사

  • 객체를 복사할 때, 객체의 주소값 뿐만 아니라 객체 내부의 객체까지 복사하는 것
  • 즉, 객체 내부의 객체까지 복사하기 때문에 원본 객체의 변경이 복사본에 영향을 미치지 않음
  • deepcopy() 함수를 사용하면 깊은 복사가 됨

예시

import copy

a = [1, 2, 3]
b = copy.copy(a) # 얕은 복사
c = copy.deepcopy(a) # 깊은 복사

a[0] = 4

print(a) # [4, 2, 3]
print(b) # [4, 2, 3]
print(c) # [1, 2, 3]

다차원 벡터를 표현할 때 중요하다

  • 다차원 벡터를 표현할 때, 얕은 복사와 깊은 복사의 차이가 중요하다
  • 다차원 벡터를 표현할 때, 얕은 복사를 하면 내부 벡터의 변경이 복사본에도 영향을 미칠 수 있음
  • 따라서, 다차원 벡터를 표현할 때는 깊은 복사를 사용하는 것이 안전함
  • 다차원 벡터를 표현할 때는 copy.deepcopy() 함수를 사용하는 것이 좋음

2차원 벡터의 예시

import copy

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

a[0][0] = 5
print(a) # [[5, 2], [3, 4]]
print(b) # [[5, 2], [3, 4]]
print(c) # [[1, 2], [3, 4]]

딥러닝 과정에서 행렬의 연산을 할 상황이 잦기 때문에, 늘 주의할 것.

물론 NumPy, sci-kit Learn, TensorFlow 등의 라이브러리를 사용하면 기본적으로 깊은 복사를 사용하므로, 이러한 문제가 발생하지 않음

Comments