23.09.05
리스트의 메모리 관리 방식
이전 포스트에 이어 이차원 리스트를 다시 살펴봅니다. 이차원 리스트를 사용하면 흥미로운 현상을 볼 수 있는데, 먼저 다음 코드를 확인해 본다.
>>>[[49, 79, 20, 100, 80], [43, 59, 85, 30, 90], [49, 79, 48, 60, 100]]
>>>[[49, 79, 20, 100, 80], [1000, 59, 85, 30, 90], [49, 79, 48, 60, 100]]
math 값을 변경했는데 midterm두번째 행의 첫번째 값이 변경되었다.
(사실 난 이게 당연하다 생각했는데 그게 아닌게 맞는데 결론은 맞는게 맞음 먼소린지 이해하지 마세요 혼잣말입니ㄷ)
이것은 파이썬 리스트가 값을 저장하는 방식 때문에 발생하는 현상이다. 파이썬은 리스트를 저장할 때 값 자체가 아니라 , 값이 위치한 메모리 주소(reference)를 저장한다.
예 죄송합니다 사진을 대충 찍긴했는데 그냥 이해하십쇼 별로 어려운 내용아니니까
2 메모리 저장 구조로 인한 리스트의 특징
-2.1 하나의 리스트에 다양한 자료형 포함 가능
다양한 자료형이 하나의 리스트에 모두 들어갈 수 있다.
>>>[['yellow', 'blue', 'green', 'black', 'purple'], 1, 0.2]
문자형, 정수형, 실수형 모두 들어갔고
리스트도 넣을수있는...이를 흔히 중첩리스트라고 한다네요(근데 이미 앞에서 이차원리스트를 했잖아? 비슷한거 아닌가?)
근데 이게 메모리주소를 저장해 메모리에 새로운 값을 할당하는데 있어 매우 높은 자유도를 보장하므로 가능하다네요
-2.2 리스트의 저장방식
두번째 특징은 리스트의 메모리 저장 방식이다, 지금은 중요하지 않지만, 차후 함수 등 다양한 파이썬 문법을 이해하는 데 필요한 내용이다. 다음 코드를 살펴보자.
>>>[5, 4, 3, 2, 1]
>>>[1, 2, 3, 4, 5]
b 와 a 변수를 각각 다른 값으로 선언한 후, b에 a를 할당하였다. 그리고 b를 출력하면 a 변수와 같은 값이 화면에 출력된다.
그리고 그 다음 식에서 a를 정렬했는데, b도 정렬되어있다. 이러한 결과가 나오는 이유는, b=a 를 입력하는 순간 b리스트도 a리스트의 메모리 주소와 같이 연결되기 때문이다. 두변수가 같은 메모리 주소와 연결되어 있으므로 하나의 변수값만 바뀌더라도 둘다 영향을 받는 것이다.
마지막으로 b에 새로운 값을 할당하면 어떻게 나오는가?
>>>[1, 2, 3, 4, 5] [6, 7, 8, 9, 10]
위 코드와 같이 b에 새로운 값을 할당하면 a와 b는 같은 메모리 주소와 연결되지 않게된다. 즉, b는 이제 새로운 메모리 주소에 새로운 값을 할당할 수 있는 것이다. 기억해야할 것은 b=a 코드이다. 어떤 리스트값을 하나의 변수에 할당하는 순간, 두 변수는 같은 메모리 주소에 연결되게 된다.
'Python 독학 > python 기본' 카테고리의 다른 글
The Basics of Python Chapter04-조건문 (0) | 2023.09.11 |
---|---|
The Basics of Python Chapter03 연습 문제 (0) | 2023.09.10 |
The Basics of Python Chapter03 (01~04) (1) | 2023.09.05 |
The Basics of Python Chapter 01~02 (0) | 2023.08.30 |
Python 기본 공부하기에 앞서 (0) | 2023.08.30 |