Python

[Python] - Tuple

jyu_seo_ 2026. 1. 16. 13:59

튜플이란?

튜플(tuple)은 목록과 유사하지만 몇가지 중요한 차이점이 있는 내장 Python 데이터 구조 이다.튜플은 둥근 괄호(소괄호)로 묶인 정렬되고 변경할 수 없는 요소 모음이다. 튜플의 요소는 다른 튜플, 목록 또는 사전을 포함하여 다양한 데이터 유형일 수 있다.

 

다음은 튜플의 몇 가지 주요 기능이다

 

1. 정렬됨

튜플은 요소의 순서를 유지하므로 목록처럼 인덱스를 사용하여 요소에 엑세스 할 수 있다.

 

2. 불변성

리스트와 달리 튜플은 생성 후 수정할 수 없다. 즉, 튜플에서 요소를 추가, 제거 또는 변경할 수 없다. 이 불변성은 시간이 지남에 따라 변경되지 않아야 하는 요소 모음을 만들려는 경우에 유용할 수 있다.

 

3. 목록보다 빠름

튜플은 변경할 수 없기 때문에 특히 대용량 데이터 세트의 경우 목록보다 메모리 효율적이고 처리 속도가 빠르다.

 

4. 사전에서 키로 사용할 수 있다.

튜플은 해시 가능하고 변경할 수 없기 때문에 목록과 달리 사전에서 키로 사용할 수 있다.

 

다음은 튜플을 만들고 사용하는 방법의 예다.

# 튜플 생성하기
my_tuple = (1, "apple", 3.14)

# 인덱스를 이용한 접근
print(my_tuple[1]) # Output: apple

# 튜플 언패킹
a,b,c = my_tuple
print(a,b,c) # Output: 1 apple 3.14

# 튜플 연결
new_tuple = my_tuple + (4, "banana")
print(new_tuple) # Output: (1, 'apple', 3.14, 4, 'banana')

# 튜플 길이
print(len(new_tuple)) # Output: 5

# 중첩된 튜플
nested_tuple = (1,2(3,4))
print(nested_tuple) # Output:(1,2(3,4))

튜플은 변경할 수 없기 때문에 목록에서와 같이 '추가', '확장' 또는 '제거'와 같은 작업을 수행할 수 없다. 튜플을 수정하려면 일반적으로 원하는 변경 내용으로 새 튜플을 만들어야 한다.


괄호 없이 튜플 사용하기

Python에서 괄호 없이 튜플을 사용할수 있다. 이를 암시적(implicit) 튜플이라한다. 튜플을 만들때 괄호를 생략하면, Python은 자동으로 요소들을 튜플로 인식한다. 이런 방식으로 튜플을 생성하는 것을 "tuple packing" 이라고도 한다.

 

예시

# 괄호 없이 튜플 생성
my_tuple = 1. "apple", 3.14
print(my_tuple) # Output: (1, 'apple', 3.14)

# 괄호 없이 튜플을 반환하는 함수
def get_name_and_age():
	return "Alice", 30

# 함수의 반환값을 괄호 없이 튜플로 받기
name, age = get_name_and_age()
print(name, age) # Output: Alice 30

 

 

괄호 없이 튜플을 사용할때 주의해야 할 점은, 연산자 우선순위와 혼동이 없어야 한다는 것이다. 예를들어, 튜플을 더하기 연산과 함께 사용하려면 괄호를 사용하여 명시적으로 표현해야 한다.

 

예시

# 튜플 더하기 연산을 사용할 때는 괄호가 필요
result = (1,2) + (3, 4)
print(result) # Output: (1,2,3,4)


튜플 변수 값 교환

Python 에서는 튜플을 사용하여 두 변수의 값을 쉽게 교환 할 수 있다. 이 방법은 임시 변수가 필요하지 않으며 구문이 간결하다.

다음은 튜플을 사용하여 두 변수의 값을 교환하는 예제다

# 초기값이 있는 변수들

 a = 5
 b = 10
 
 # 튜플을 사용하여 값 교환
 a,b = b,a
 
 # 교환된 값 출력
 print("a", a) # Output: a : 10
 print("b", b) # Output: b : 5

 

이 예제에서는 튜플 (b,a)가 생성된 다음 해당 값이 변수 a 및 b로 압축 해제됩니다. 결과적으로 임시 변수 없이도 두 변수의 값이 교환된다.


튜플로 함수 값 반환

 

Python에서는 튜플을 사용하여 함수에서 여러 값을 반환할 수 있습니다. 이를 달성하려면 함수에서 원하는 값을 포함하는 튜플을 반환하기만 하면 됩니다. 함수를 호출할 때 반환된 튜플을 별도의 변수로 압축 해제할 수 있습니다. 다음은 튜플을 사용하여 여러 값을 반환하는 함수의 예입니다.

def get_name_and_age():
	# 이름과 나이 값을 정의한다.
    name = "Alice"
    age = 30
    
    # 이름과 나이를 튜플 형태로 반환한다.
    return name, age
    
# 함수를 호출하고 반환된 튜플을 언팩한다.
preson_name, person_age = get_name_and_age()


# 언팩된 값을 출력한다
print("Name:", person_name) # Output: Name: Alice
print("Age:", person_age) #Output: Age:30

 

이 예제에서 get_name_and_age 함수는 이름과 나이를 포함하는 튜플을 반환한다. 함수를 호출할때 반환된 튜플은 person_name 및 person_age 변수로 풀린다.


리스트와 딕셔너리에서 튜플 사용하기

튜플을 목록 내의 요소로 사용하고 사전의 키 또는 값으로 사용할 수 있다. 다음은 목록과 사전 모두에서 튜플을 사용하는 방법을 보여주는 예제이다.

 

1. 리스트에서 튜플 사용

# 튜플을 포함하는 리스트 생성
persons = [("Alice", 30), ("Bob", 25), ("Charlie", 22)]

# 리스트 내의 튜플 요소들에 접근하고 출력
for name, age in persons:
	print(f"Name: {name}, Age: {age}")

 

2. 딕셔너리에서 튜플 사용

# 튜플을 키로 사용하여 딕셔너리 생성
grades = {
	("Math", "Alice"): 90,
    ("Math", "Bob"): 85,
    ("English", "Alice"): 95,
    ("English", "Bob"): 88,
}

# 튜플 키를 사용하여 딕셔너리에서 요소를 엑세스하고 출력
for (subject, name), grade in grades.items():
	print(f"Subject: {subject}, Name:{name}, Grade: {grade}")

 

이 예제에서는 튜플을 키로 사용하여 grades라는 딕셔너리를 만든다. 키는 과목과 학생 이름으로 구성되며 값은 해당 과목에 대한 학생의 성적을 나타낸다. 그런 다음 items() 메서드를 사용하여 사전을 반복하고 각 키-값 쌍을 변수 subject, name 및 grade로 풀어 정보를 인쇄한다.


객체별 특징

가변 객체(mutable)

 

1. 생성 후 변경 가능: 초기화 후 상태나 내용을 수정할 수 있다.

2. Python의 예: 목록, 사전 및 집합은 변경 가능한 개체의 예

3. 내부수정 : 변경 가능한 개체에 대한 작업은 새 개체를 만들지 않고 상태를 직접 변경할 수 있다.

4. 잠재적으로 메모리 효율성이 낮음: 변경 가능한 객체는 변경될 수 있으므로 크기가 커지거나 줄어들 때 더 많은 메모리를 사용할 수 있다.

5. 사전 키로 사용하기에 적합하지 않음: 변경 가능한 객체는 상태가 변경되어 해싱 프로세스에 영향을 줄수 있기 때문에 사전에서 키로 사용할수 없다.

 

불변 객체(immutable)

 

1. 생성 후 변경할 수 없음: 초기화 후에도 상태 또는 애용이 일정하게 유지된다.

2. Python의 예: 문자열, 튜플, 정수 및 부동 소수점은 불변 객체의 예

3. 수정을 위한 새 객체: 불변 객체를 변경하는 것처럼 보이는 작업을 수행할때 대신 새 객체가 생성된다.

4. 메모리 효율성 향상: 변경 불가능한 개체는 크기와 내용이 수명 기간동안 일정하게 유지되므로 메모리를 덜 사용한다.

5. 사전 키로 사용하기에 적합: 불변 객체는 상태가 일정하게 유지되어 일관된 해싱 프로세스를 보장하기 때문에 사전의 키로 사용할수 있다.

'Python' 카테고리의 다른 글

[Python] - 텍스트 파일 처리  (0) 2026.01.16
[Python] - 람다(Lambda)  (0) 2026.01.16
[Python] - return value  (0) 2026.01.16
[PYTHON] - RANGE  (0) 2026.01.15
[PYTHON] - Dictionary  (0) 2026.01.15