안녕하세요? 뜻밖의 행운입니다.
오늘은 패스트 캠퍼스 챌린지 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에 변수가 저장이 되는 것이 아니라는 것을 확실히 알 수 있게 되었습니다.
다른 언어도 공부해야 하지 않을까 생각이 들 수 있는데요
우선은 한가지 언어를 확실하게 배우고 나면
다른 언어 습득도 쉬워집니다. 요령이 생겨서요
이런 메모리 주소를 가르키는 것도 비슷해서 더 쉽게 습득 가능합니다.
아무튼 하루하루 이렇게 새로운 지식을 알아가는거 굉장히 기분 좋네요
'IT > 프로그래밍' 카테고리의 다른 글
[파이썬] 파이썬 람다함수 [패스트 캠퍼스 챌린지 31일] (0) | 2022.02.23 |
---|---|
[파이썬] 파이썬 람다함수 [패스트 캠퍼스 챌린지 30일] (0) | 2022.02.22 |
[파이썬] 파이썬 매개변수 2번째 [패스트 캠퍼스 챌린지 29일] (0) | 2022.02.21 |
[파이썬] 파이썬 매개변수 [패스트 캠퍼스 챌린지 28일] (0) | 2022.02.20 |
[파이썬] 파이썬 심화 문자열 다루기 연습문제 [패스트 캠퍼스 챌린지 27일] (0) | 2022.02.19 |
[파이썬] 파이썬 심화 리스트 내포 [패스트 캠퍼스 챌린지 25일] (0) | 2022.02.17 |
[파이썬] 파이썬 심화 리스트 다루기 [패스트 캠퍼스 챌린지 24일] (0) | 2022.02.16 |
[파이썬] 파이썬 심화 문자열 포매팅[패스트 캠퍼스 챌린지 23일] (0) | 2022.02.15 |
[파이썬] 파이썬 심화 문자열 다루기[패스트 캠퍼스 챌린지 22일] (0) | 2022.02.14 |
[파이썬] 파이썬 1차 프로젝트 블로그 만들기 마지막 [패스트 캠퍼스 챌린지 21일] (0) | 2022.02.13 |