IT/프로그래밍

[파이썬] 파이썬 심화 할당과 복사 [패스트 캠퍼스 챌린지 26일]

뜻밖의 행복 2022. 2. 18. 22:58
반응형

 

안녕하세요? 뜻밖의 행운입니다.

 

오늘은 패스트 캠퍼스 챌린지 26일차입니다. 

오 길다 길어 

역시 돈의 힘 돌려 받기 위해 여기까지 왔네요 

오늘은 파이썬 할당과 복사에 대해 배웠습니다. 

그리고 그동안 제가 변수에 저장이라고 했는데 

정확히 표현하면 변수 저장이 아닌 것을 알게 되었습니다.

 

X = 100 이라고 했을 때 

변수 X를 선언하면 100이라는 값이 X 에 저장이 되는 것이 아니라

100이라는 객체가 생기고 X는 해당 100을 가리키고 있다고 이해를 해야 

프로그래밍을 할 때 실수가 없습니다. 

 

예를들어 

X = 100

Y = X 라고 변수를 2개 선언 하면 

Y에 X의 값인 100이 저장이 되었다고 생각하고 

Y 값을 변경해버리면 X 도 변경 됩니다. 

이것은 결국 저장 되는 것이 아니라 X, Y 모두 100 이라는 객체가 저장된 메모리 위치를 

가리키고 있다는 뜻입니다. 

그리고 이 개념을 기억해야 개발하다가 발생하는 오류에 당황하지 않을 수 있습니다.

그렇다면? 

Y를 변경하더라도 X가 변경되지 않게 하기 위해서는 어떻게 해야 할까요?

바로 Y = X.copy() 라고 해야 복사가 되고 

Y값을 변경하더라도 X가 바뀌지 않습니다.

만약 다차원 리스트를 복사 해야 한다면 

X = [[1, 2]], [3,4,5]] 같은 

Y = copy.deepcopy(X) 를 써야 복사가 됩니다.

 

실제 그런지 볼까요?

x = [1,2,3,4,5]
y = x
y[2] = 0
print(x)
print(y)
print(id(x))
print(id(y))

위 코드는 y 리스트에 3번째 값을 0 으로 변경하는 코드 입니다.

 

실행시키면 y, x 모두 변경된것을 알 수 있습니다.

주의 해야겠죠?

print(id(x)) 는 메모리 주소를 뜻합니다. 

x, y 가 같은 메모리 주소를 가르키는 것으로 봐서 

x, y에 변수가 저장이 되는 것이 아니라는 것을 확실히 알 수 있게 되었습니다.

다른 언어도 공부해야 하지 않을까 생각이 들 수 있는데요 

우선은 한가지 언어를 확실하게 배우고 나면 

다른 언어 습득도 쉬워집니다. 요령이 생겨서요 

이런 메모리 주소를 가르키는 것도 비슷해서 더 쉽게 습득 가능합니다.

아무튼 하루하루 이렇게 새로운 지식을 알아가는거 굉장히 기분 좋네요

 

 

반응형