본문 바로가기
프로그래밍/Python

[파이썬] 리스트 정렬 sort() vs sorted() 차이 완벽 정리

by 아임코딩 2026. 8. 13.
반응형

안녕하세요 아임코딩입니다. 파이썬으로 리스트를 정렬할 때 sort()와 sorted() 둘 다 사용할 수 있어서 헷갈리는 분들이 많습니다. 이번 글에서 둘의 차이를 명확하게 정리해드리겠습니다.

1. 결론 먼저: 가장 중요한 차이

구분sort()sorted()
사용 대상 리스트의 메서드 모든 반복 가능한 객체에 쓸 수 있는 함수
원본 리스트 직접 변경 원본은 그대로, 새 리스트 반환
반환값 None 정렬된 새 리스트

이 표 하나만 기억하셔도 실전에서 헷갈릴 일이 없습니다. 아래에서 코드로 직접 확인해보겠습니다.

2. sort() 사용법

 
python
numbers = [5, 2, 8, 1, 9]
numbers.sort()

print(numbers)  # [1, 2, 5, 8, 9]

sort()는 리스트 자체를 정렬해버립니다. 원본 리스트가 바뀝니다.

 
python
numbers = [5, 2, 8, 1, 9]
result = numbers.sort()

print(result)   # None ⚠️
print(numbers)  # [1, 2, 5, 8, 9]

여기서 많이 하는 실수가 있습니다. result = numbers.sort()처럼 반환값을 변수에 저장하려는 경우인데요, sort()는 아무것도 반환하지 않습니다(None). 정렬은 이미 numbers 안에서 끝났기 때문이에요. 이 부분을 모르고 쓰면 None이 나와서 당황하는 경우가 많으니 꼭 기억해두세요.

3. sorted() 사용법

 
python
numbers = [5, 2, 8, 1, 9]
new_numbers = sorted(numbers)

print(numbers)      # [5, 2, 8, 1, 9]  ← 원본 그대로!
print(new_numbers)  # [1, 2, 5, 8, 9]  ← 정렬된 새 리스트

sorted()는 원본 리스트는 건드리지 않고, 정렬된 새로운 리스트를 만들어서 반환합니다. 원본 데이터를 유지해야 할 때는 반드시 sorted()를 사용해야 합니다.

또한 sorted()는 리스트뿐 아니라 튜플, 문자열, 딕셔너리 등 반복 가능한(iterable) 모든 자료형에 사용할 수 있습니다.

 
python
word = "python"
print(sorted(word))  # ['h', 'n', 'o', 'p', 't', 'y']

4. 내림차순 정렬하기

두 함수 모두 reverse=True 옵션을 사용하면 내림차순으로 정렬할 수 있습니다.

 
python
numbers = [5, 2, 8, 1, 9]

numbers.sort(reverse=True)
print(numbers)  # [9, 8, 5, 2, 1]
 
python
numbers = [5, 2, 8, 1, 9]

new_numbers = sorted(numbers, reverse=True)
print(new_numbers)  # [9, 8, 5, 2, 1]

5. key 옵션으로 정렬 기준 정하기

문자열 길이 순으로 정렬하고 싶다거나, 특정 기준으로 정렬하고 싶을 때는 key 옵션을 사용합니다.

 
python
words = ["banana", "kiwi", "apple", "fig"]

# 문자열 길이 순으로 정렬
result = sorted(words, key=len)
print(result)  # ['kiwi', 'fig', 'apple', 'banana']

key=len을 넣으면 각 요소의 길이를 기준으로 정렬합니다. len 대신 원하는 함수를 넣으면 그 기준으로 정렬할 수 있어요.

6. 언제 뭘 써야 할까?

  • 원본 리스트가 더 이상 필요 없고, 그 자체를 정렬해서 쓰고 싶다 → sort()
  • 원본은 유지하면서 정렬된 결과만 따로 필요하다 → sorted()
  • 리스트가 아닌 다른 자료형(튜플, 문자열 등)을 정렬하고 싶다 → sorted() (sort()는 리스트에만 있는 메서드라 다른 자료형엔 못 씁니다)

7. 정리

 
python
numbers = [5, 2, 8, 1, 9]

# sort() : 원본 변경, 반환값 없음(None)
numbers.sort()

# sorted() : 원본 유지, 새 리스트 반환
sorted(numbers)

이름이 비슷해서 헷갈리기 쉽지만, "원본을 바꾸느냐 안 바꾸느냐"만 기억하면 실전에서 헷갈릴 일이 없습니다. 궁금한 점은 댓글로 남겨주세요!

반응형