λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Language/Python

[Python]파이썬 μ»¬λ ‰μ…˜ μžλ£Œν˜•: λ¦¬μŠ€νŠΈμ™€ νŠœν”Œμ˜ ν™œμš©λ²•κ³Ό 차이점

by YJ Dev 2024. 3. 21.
728x90
λ°˜μ‘ν˜•
SMALL

python λ¦¬μŠ€νŠΈμ™€ νŠœν”Œμ€ μ»¬λ ‰μ…˜ μžλ£Œν˜•μœΌλ‘œ, 각각 λ³€κ²½ κ°€λŠ₯ν•œ(mutable)κ³Ό λ³€κ²½ λΆˆκ°€λŠ₯ν•œ(immutable) μ‹œν€€μŠ€λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. μ΄λ“€μ˜ 차이와 각각의 νŠΉμ§•μ„ μžμ„Ένžˆ μ‚΄νŽ΄λ³΄λ©° λΉ„κ΅ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.


μ§€λ‚œ μ‹œκ°„μ—λŠ” κΈ°λ³Έ μžλ£Œν˜•μ— λŒ€ν•΄ μ•Œμ•„λ³΄μ•˜λŠ”λ°μš”! κΈ°λ³Έ μžλ£Œν˜•μ€ μ§€λ‚œ ν¬μŠ€νŒ…μ„ λ‚΄μš©μ„ μ°Έκ³ ν•΄ μ£Όμ„Έμš”πŸ˜Š

" "

[파이썬]μžλ£Œν˜•

λͺ©μ°¨ 0. λ³€μˆ˜μ˜ μ„ μ–Έ 예제문제 μ •λ‹΅ 1. μžλ£Œν˜•μ΄λž€ 2. μ •μˆ˜ν˜• 3. μ‹€μˆ˜ν˜• 4. λ¬Έμžμ—΄ 5. λ…Όλ¦¬ν˜• 6. ν•΅μ‹¬λ‚΄μš© μ˜€λŠ˜μ€ μžλ£Œν˜• 쀑 일반 μžλ£Œν˜•μ— λŒ€ν•΄μ„œ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€πŸ™‹‍♀️ μ˜€λŠ˜λ„ μ§€λ‚œ ν¬μŠ€νŒ… 문제

creativevista.tistory.com

리슀트 νŠœν”Œ


1. μ»¬λ ‰μ…˜ μžλ£Œν˜•μ΄λž€ ❓

μ»¬λ ‰μ…˜ μžλ£Œν˜•μ€ 데이터λ₯Ό κ·Έλ£Ήν™”ν•˜κ³  μ‘°μž‘ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” λ°μ΄ν„°μ˜ ꡬ쑰λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. λ°μ΄ν„°μ˜ μΆ”κ°€, 제거, μˆ˜μ •, 검색 λ“±μ˜ μž‘μ—…μ„ μˆ˜ν–‰ν•˜μ—¬ 효율적이고 μœ μ§€λ³΄μˆ˜κ°€ μ‰¬μš΄ μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 주둜 μ‚¬μš©λ˜λŠ” μ»¬λ ‰μ…˜μ˜ μžλ£Œν˜•μ—λŠ” list, tuple, set, dictionary이 μžˆμŠ΅λ‹ˆλ‹€.


2. 리슀트(list) πŸ“‘

listλŠ” λ³€μˆ˜λ₯Ό μ—¬λŸ¬ 번 μ„ μ–Έν•˜μ§€ μ•Šκ³  μ—¬λŸ¬ 칸을 가진 list ν•œ 번만 μ„ μ–Έν•˜κΈ° μœ„ν•΄μ„œ μ‚¬μš©λ©λ‹ˆλ‹€. λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λ©΄, 값이 ν•œ 개만 λ‹΄κΈ°κ³ , λ³€μˆ˜λͺ…(이름)도 λ°˜λ“œμ‹œ λΆ™μ—¬μ•Ό ν•©λ‹ˆλ‹€. λ³€μˆ˜λ₯Ό μ—¬λŸ¬ 개 μ„ μ–Έν•˜λ©΄ 이름도 λ§Žμ•„μ Έμ„œ κ΄€λ¦¬ν•˜κΈ°κ°€ λΆˆνŽΈν•΄μ§‘λ‹ˆλ‹€.
listλŠ” ν•˜λ‚˜μ˜ 이름을 가지고 각 값을 인덱슀(κ°’μ˜ μœ„μΉ˜)둜 μ ‘κ·Όν•˜κΈ° λ•Œλ¬Έμ— 값을 κ΄€λ¦¬ν•˜κΈ° 훨씬 νŽΈν•˜κ³  μ‰¬μ›Œμ§‘λ‹ˆλ‹€.


πŸ™Œ μ—¬κΈ°μ„œ 잠깐!
μΈλ±μŠ€λž€?
μ‹œν€€μŠ€ν˜• 자료 (μˆœμ„œλŒ€λ‘œ λ‚˜μ—΄λœ 데이터 : λ¬Έμžμ—΄, list, tuple)에 μžˆλŠ” 각 μš”μ†Œμ˜ μœ„μΉ˜λ₯Ό λ‚˜νƒ€λ‚΄λŠ” κ°’.

λ‹€μŒ ν¬μŠ€νŒ…μ—μ„œ μΈλ±μŠ€μ— λŒ€ν•œ λ‚΄μš©μ„ 확인해 μ£Όμ„Έμš”πŸ˜

# λ³€μˆ˜λ₯Ό μ„ μ–Έ -> μ—¬λŸ¬κ°œμ˜ λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λ©΄ 값을 κ΄€λ¦¬ν•˜κΈ° λ³΅μž‘ν•˜κ³  뢈편
num1 = 1
num2 = 2
num3 = 3
num4 = 4
num5 = 5
color1 = 'red'
color2 = 'orange'
color3 = 'yellow'
color4 = 'green'
color5 = 'blue'

# list둜 μ„ μ–Έ -> 이름 ν•˜λ‚˜λ‘œ 인덱슀(κ°’μ˜ μˆœμ„œ)둜 μ›ν•˜λŠ” 값을 쉽고 νŽΈν•˜κ²Œ κ°€μ Έ 옴
num = [1, 2, 3, 4, 5]
color = [red, orange, yellow, green, blue]


또 κ·œμΉ™μ„±μ΄ μ—†λŠ” 값에 listλ₯Ό μ‚¬μš©ν•˜μ—¬
κ·œμΉ™μ„±μ„ λΆ€μ—¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

# κ·œμΉ™μ„±μ΄ μ—†λŠ” 값듀을 μ„ μ–Έ
num = 1
color = 'white'
animal = 'panda'
fruit = 'apple'
city = 'korea'

# listλ₯Ό μ‚¬μš©ν•˜μ—¬ κ·œμΉ™μ„±μ„ λΆ€μ—¬
data = [1, 'white', 'panda', 'apple', 'korea']

β–Ά list μ„ μ–Έ

listλ₯Ό λŒ€κ΄„ν˜Έλ‘œ ν‘œν˜„λ˜λ©° μ„ μ–Έν•˜λŠ” ν˜•νƒœλŠ” 기본적으둜 μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.
listλͺ… = [κ°’ 1, κ°’ 2, κ°’ 3...]
또 ν•˜λ‚˜μ˜ listμ—λŠ” μ •μˆ˜, λ¬Έμžμ—΄ λ“± μ—¬λŸ¬ κ°€μ§€μ˜ μžλ£Œν˜•μ„ κ°€μ§ˆ μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

a = [] # 빈 리슀트 (μ΄ˆκΈ°κ°’)
b = [1, 2, 3]  # μ •μˆ˜λ‘œλ§Œ 이루어진 리슀트
c = ['a', 'b', 'c', 'd'] # λ¬Έμžμ—΄ 4개둜 이루어진 리슀트
d = [1, 2, 'a', 'b', True] ;# μ—¬λŸ¬ μžλ£Œν˜•μœΌλ‘œ 이루어진 리슀트
e = [1, 2, ['a', 'b']] # 쀑첩 리슀트


β–Ά list μ—°μ‚°μž

list μ—°μ‚°μžμ—λŠ” μ—°κ²° μ—°μ‚°μž (+), 반볡 μ—°μ‚°μž (*), μŠ¬λΌμ΄μ‹± μ—°μ‚°μž, 멀버십 μ—°μ‚°μž(in)κ°€ μžˆλ‹€.

μŠ¬λΌμ΄μ‹±μ€ λ‹€μŒ ν¬μŠ€νŒ… λ‚΄μš©μ„ μ°Έκ³ ν•΄ μ£Όμ„Έμš”!

  • μ—°κ²° μ—°μ‚°μž + : listλ₯Ό ν•˜λ‚˜μ˜ 리슀트둜 κ²°ν•©
  • 반볡 μ—°μ‚°μž * : listλ₯Ό μ •μˆ˜λ§ŒνΌ 반볡
list_a = [1, 2, 3]
list_b = [4, 5, 6]


list_c = list_a + list_b # μ—°κ²° μ—°μ‚°μž +
print(list_c) # [1, 2, 3, 4, 5, 6] 

list_d = list_a * 3 # 3번 반볡
print('list_d :',list_d) # [1, 2, 3, 1, 2, 3, 1, 2, 3]
  • 멀버십 μ—°μ‚°μž in : νŠΉμ • μ›μ†Œμ˜ 포함 μ—¬λΆ€ 확인 (μ°Έ : True, 거짓 : False λ°˜ν™˜)
data = [1, 2, 3, 4, 5]
print(2 in data) # True
print(6 in data) # False


β–Ά list μΆ”κ°€

listμ—λŠ” μš”μ†Œμ˜ 맨 뒀에 ν•˜λ‚˜μ˜ 값을 μΆ”κ°€(append)ν•˜κ±°λ‚˜ μ›ν•˜λŠ” μœ„μΉ˜μ— ν•˜λ‚˜μ˜ 값을 μΆ”κ°€(insert) ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

  • listλͺ….append(κ°’)
list = [1, 2, 3]
list.append(4) # 맨 뒀에 κ°’ 4λ₯Ό μ‚½μž…
# print(list) # [1, 2, 3, 4]
  • listλͺ….insert(인덱슀 번호, κ°’)
list1 = [1, 2, 3]
list1.insert(1, 50) # 1번 인덱슀 μžλ¦¬μ— 50을 μ‚½μž…
print('list1:', list1) # [1, 50, 2, 3]


list κ°’μ˜ 제일 첫 번째 μΈλ±μŠ€λŠ” 0번이며 λ‹€μŒμ€ + 1을 ν•΄μ£Όλ©΄ λ©λ‹ˆλ‹€.

μœ„ 예제 list1의 1번 인덱싱은 2μž…λ‹ˆλ‹€.
insert(1, 50) ν•¨μˆ˜λ₯Ό μ΄μš©ν•΄μ„œ 1번 인덱슀 μžλ¦¬μ— 50을 μ‚½μž…ν•˜λ©΄ κΈ°μ‘΄ [1, 2, 3]μ—μ„œ 1번 인덱슀 μžλ¦¬μ— 50이 μΆ”κ°€λ˜μ–΄ [1, 50, 2, 3]이 좜λ ₯λ©λ‹ˆλ‹€.


β–Ά list μˆ˜μ •

list의 값은 인덱싱을 μ‚¬μš©ν•˜μ—¬ νŠΉμ • μœ„μΉ˜λ₯Ό μˆ˜μ •ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

  • listλͺ…[인덱슀 번호] = μƒˆλ‘œμš΄ κ°’
list2 = [1, 2, 3, 4]
list2[0] = 20 # 0번 인덱슀 μžλ¦¬μ— 값을 20으둜 μˆ˜μ •
print(list2) # [20, 2, 3, 4]


β–Ά list μ‚­μ œ

listλ₯Ό μ‚­μ œν•˜λŠ” λ°©λ²•μœΌλ‘œλŠ” νŠΉμ • 값을 가진 첫 번째 μš”μ†Œλ₯Ό μ§€μš°λŠ” remove, 인덱슀 번호둜 μ›ν•˜λŠ” μœ„μΉ˜μ˜ 값을 μ •ν™•ν•˜κ²Œ μ§€μš°λŠ” delκ³Ό pop, λͺ¨λ“  값을 μ‚­μ œν•˜λŠ” clearκ°€ μžˆμŠ΅λ‹ˆλ‹€.

  • listλͺ….remove(κ°’)
list3 = [0, 7, 2, 3, 4, 5, 7]
list3.remove(7) # 처음으둜 λ§Œλ‚˜λŠ” 7을 μ§€μš°κΈ°
print(list3) # [0, 2, 3, 4, 5, 7]


list3μ—λŠ” 7이 두 번 λ“€μ–΄κ°€ μžˆμŠ΅λ‹ˆλ‹€.

removeλ₯Ό μ‚¬μš©ν•˜κ²Œ 되면 첫 번째둜 λ§Œλ‚˜λŠ” 7만 μ§€μš°κ³  뒀에 μžˆλŠ” 7은 κ·ΈλŒ€λ‘œ 좜λ ₯λ©λ‹ˆλ‹€.

  • del listλͺ…[인덱슀 번호]
list4 = [0, 1, 2, 3, 4, 5]
del list4[1] # 1번 인덱슀 값을 μ‚­μ œ
print(list4) # [0, 2, 3, 4, 5]
  • listλͺ….pop(인덱슀 번호)
list5 = [0, 1, 2, 3, 4, 5]
list5.pop(1) # 1번 인덱슀 값을 μ‚­μ œ
print(list5) # [0, 2, 3, 4, 5]
  • listλͺ….clear()
list6 = [0, 1, 2, 3, 4, 5]
list6.clear() # list6 λͺ¨λ“  μš”μ†Œ μ‚­μ œ
print(list6) # []

3. νŠœν”Œ(tuple)πŸ“Œ

tuple은 list와 λ§ˆμ°¬κ°€μ§€λ‘œ μˆœμ„œκ°€ μžˆλŠ” μžλ£Œν˜• (μ‹œν€€μŠ€ μžλ£Œν˜•)μ΄λ―€λ‘œ 인덱싱과 μŠ¬λΌμ΄μ‹±μ΄ κ°€λŠ₯ν•˜λ©° 연산을 μˆ˜ν–‰ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. (λ§μ…ˆ, κ³±μ…ˆ)

ν•˜μ§€λ§Œ λͺ…ν™•ν•œ μ°¨μ΄μ μœΌλ‘œλŠ” list와 달리 tuple은 μƒμ„±λ˜κ³  λ‚˜λ©΄ κ·Έ 값을 λ³€κ²½ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

β–Ά tuple μ„ μ–Έ

tuple은 μ†Œκ΄„ν˜Έλ₯Ό μ‚¬μš©ν•˜κ±°λ‚˜ μƒλž΅ν•˜μ—¬ μ„ μ–Έν•  수 있으며 μ‰Όν‘œλ‘œ 각 μš”μ†Œλ₯Ό κ΅¬λΆ„ν•©λ‹ˆλ‹€.

  • dataTuple1 = (1,2,3)
  • dataTuple1 = 1,2,3
dataTuple1 = (1,2,3)
dataTuple1[0] = 10 # νŠœν”Œμ˜ 값은 μˆ˜μ • λΆˆκ°€
print(dataTuple1[0]) # μ—λŸ¬ λ°œμƒ!

⚠️ Error⚠️ TypeError: 'tuple' object does not support item assignment
(νƒ€μž…μ—λŸ¬ : 'tuple' κ°œμ²΄λŠ” ν•­λͺ© 할당을 μ§€μ›ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.)

또 ν•˜λ‚˜ μ£Όμ˜ν•  점은 값을 ν•˜λ‚˜λ§Œ λ‹΄κ²Œ 될 경우 λ³€μˆ˜λ‘œ μΈμ‹ν•˜κ²Œ λ©λ‹ˆλ‹€.

dataTuple = (100)
print(dataTuple) # 100
print(type(dataTuple)) # <class 'int'>


dataTuple에 100μ΄λΌλŠ” 값이 ν•˜λ‚˜λ§Œ λ‹΄κ²Όκ³ 

print ν•¨μˆ˜λ₯Ό μ΄μš©ν•˜μ—¬ type을 확인해 λ³΄λ‹ˆ int νƒ€μž…μž„μ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
tuple은 μ—¬λŸ¬ 개의 값을 λ‹΄κΈ° μœ„ν•΄μ„œ μ‚¬μš©ν•˜μ§€λ§Œ ν˜Ήμ—¬λ‚˜ ν•˜λ‚˜μ˜ 값을 λ‹΄κ³  μ‹Άλ‹€λ©΄ dataTuple = (100, ) μ΄λ ‡κ²Œ λ³€κ²½ν•˜λ©΄ λ©λ‹ˆλ‹€. 즉, ν•˜λ‚˜μ˜ κ°’ 뒀에 μ‰Όν‘œλ₯Ό λΆ™μ—¬μ£Όλ©΄ tuple둜 μ‚¬μš©ν•  수 있게 λ©λ‹ˆλ‹€.


4. 리슀트(list)와 νŠœν”Œ(tuple) λΉ„κ΅πŸ†š

그럼 μ΄λ²ˆμ—λŠ” 리슀트(list)와 νŠœν”Œ(tuple)의 곡톡점과 차이점을 μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

β–Ά 곡톡점

  • μˆœμ„œκ°€ μžˆλŠ” μžλ£Œν˜• (μ‹œν€€μŠ€ μžλ£Œν˜•)
  • μˆœμ„œκ°€ μžˆμœΌλ―€λ‘œ 인덱싱과 μŠ¬λΌμ΄μ‹± κ°€λŠ₯
  • 연산이 κ°€λŠ₯ (λ§μ…ˆ, κ³±μ…ˆ)

β–Ά 차이점

list tuple
λŒ€κ΄„ν˜Έ μ‚¬μš© [ ] μ†Œκ΄„ν˜Έ μ‚¬μš© ( ) , μƒλž΅ κ°€λŠ₯
κ°’ μˆ˜μ •, μΆ”κ°€, μ‚­μ œ κ°€λŠ₯ κ°’ λ³€κ²½ λΆˆκ°€

5. ν•΅μ‹¬λ‚΄μš©πŸ‘€

리슀트
λ¦¬μŠ€νŠΈμ™€ νŠœν”Œ 차이

728x90
λ°˜μ‘ν˜•