본문 바로가기

Python

반환값과 메모리 사용 효율성

#11. List(리스트)(2) - 리스트 인덱싱, 리스트 슬라이싱

의 코딩문제 4번을 풀면서 반환값과 메모리 사용의 효율성이 연관되어 있음을 알게 되었습니다.

4. 리스트 ['a', 'b', 'c', 'd', 'e', 'f']를 선언하고, 슬라이싱을 사용하여 리스트의 끝에서 세 번째 요소부터 시작하여 처음까지의 모든 요소를 역순으로 출력하는 코드를 작성하세요.

letters = ['a', 'b', 'c', 'd', 'e', 'f']
modified_letters = letters[:-2]
reversed_letters = modified_letters.sort(reverse=True)
print(reversed_letters)

 

처음 코드를 작성했을때는 a, b, c, d를 modified_letters list에 저장을 한 다음에 .sort() method를 사용하여 이를 reversed_letters에 저장하는 코드를 작성하였습니다. 그리고 print된 결과는 'None' 이라는 반환값을 주었습니다.

.sort() 메서드는 리스트를 제자리에서(in-place) 정렬하며, 반환값으로 None을 반환합니다. 이는 새로운 리스트를 생성하지 않고, 기존 리스트를 직접 수정하기 때문입니다. 이 과정에서 메모리 사용의 효율성을 높이는 방법을 채택한 것입니다.

letters = ['a', 'b', 'c', 'd', 'e', 'f']
# 리스트의 마지막 두 요소를 제외한 나머지 부분을 가져옵니다.
modified_letters = letters[:-2]
print(modified_letters)
# modified_letters 리스트를 내림차순으로 정렬합니다.
# reversed_letters = modified_letters[::-1]
modified_letters.sort(reverse=True)

print(modified_letters)

 

문제를 해결하기 위해, sort() 메서드를 사용하여 리스트를 제자리에서 정렬하고, 그 결과를 출력하는 방식으로 변경하였습니다. 파이썬의 여러 메서드와 함수는 메모리 사용의 효율성을 고려하여 설계되었습니다. sort() 메서드가 새로운 리스트를 반환하지 않고 None을 반환하는 이유는 메모리를 절약하기 위해서입니다. 제자리에서 리스트를 정렬하면 새로운 메모리를 할당하지 않고 기존 메모리를 재사용하게 됩니다. 이와 대조적으로, 새로운 리스트를 생성하는 sorted() 함수는 원본 리스트를 변경하지 않으므로, 메모리를 추가로 사용하게 됩니다.

letters = ['a', 'b', 'c', 'd', 'e', 'f']
sorted_letters = sorted(letters[:-2], reverse=True)
print(sorted_letters)  # 출력: ['d', 'c', 'b', 'a']

 

여기서 sorted() 함수는 새로운 리스트를 반환하며, 원본 리스트는 변경되지 않습니다. 결론으로, 파이썬의 sort() 메서드는 메모리 사용을 최소화하기 위해 제자리에서 정렬을 수행하며, 이를 통해 효율적인 메모리 관리가 가능합니다.

 

'Python' 카테고리의 다른 글

pass 명령문  (0) 2024.05.26
Try, except 구문  (0) 2024.05.26
메서드(method), 객체(object)란? 메서드와 함수의 차이점은?  (0) 2024.05.24