๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Python/๊ธฐ์ดˆ

[๊ฐœ๋ฐœ๋กœ๊ทธ Python] ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ - No.6

by ๐ŸŒปโ™š 2021. 6. 5.

Python 3.9.5 ๋ฒ„์ „์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ๊ตฌ์กฐ(Data Structure)๋ž€?

๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋Š” ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ํ•˜๋‚˜์˜ ์ง‘ํ•ฉ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ตฌ์กฐ(structure) ์ž…๋‹ˆ๋‹ค. ์ด์ „์— ๋ณ€์ˆ˜์— ์ˆซ์ž๋‚˜ ๋ฌธ์ž ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ €์žฅํ–ˆ์—ˆ๋Š”๋ฐ... ๊ณผ์ผ๋“ค์˜ ์ง‘ํ•ฉ ์ฒ˜๋Ÿผ ์—ฐ๊ด€๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๊ฐ๊ฐ ๋‹ค๋ฅธ ๋ณ€์ˆ˜๋กœ ์„ ์–ธ์„ ํ•ด์ค˜์•ผํ• ๊นŒ์š”?

 

# ๊ฐ๊ฐ ๋ณ€์ˆ˜๋กœ ์„ ์–ธ
fruit1 = '์ˆ˜๋ฐ•'
fruit2 = '์ฐธ์™ธ'
fruit3 = '์ž๋ชฝ'
fruit4 = '๋ฉœ๋ก '

# ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ธ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์„ ์–ธ
fruits = ['์ˆ˜๋ฐ•', '์ฐธ์™ธ', '์ž๋ชฝ', '๋ฉœ๋ก ']

์œ„์˜ ์ด๋ฏธ์ง€๋ฅผ ์ฝ”๋“œํ™”ํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์—ฐ๊ด€๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ๊ฐ ๋ณ€์ˆ˜๋กœ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์ค‘ ํ•˜๋‚˜์ธ list๋ฅผ ๋งŒ๋“ค์–ด์„œ ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜์—์„œ ๊ด€๋ฆฌํ•˜๋ฉด ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

Python์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ

Python์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • List
  • Tuple
  • Set
  • Dictionary

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์œ„ 4๊ฐ€์ง€ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

List (๋ฆฌ์ŠคํŠธ)

๋‹ค๋ฅธ ์–ธ์–ด์—์„œ๋Š” Array(๋ฐฐ์—ด)๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜ํ•™์  ์˜๋ฏธ์—์„œ์˜ ๋ฐฐ์—ด๊ณผ ๊ฐ™์ด ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋  ๊ฒƒ ๊ฐ™๊ณ  ๋ฆฌ์ŠคํŠธ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ €์žฅํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

 

 

List ์ฝ๊ธฐ

๋ฆฌ์ŠคํŠธ์˜ ์ธ๋ฑ์Šค

# ๊ณผ์ผ์„ ๋‹ด์€ ๋ฆฌ์ŠคํŠธ
fruits = ['์ˆ˜๋ฐ•', '์ฐธ์™ธ', '์ž๋ชฝ', '๋ฉœ๋ก ']

# len ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
print(len(fruits)) # 4

print(fruits[0]) # ์ˆ˜๋ฐ•
print(fruits[1]) # ์ฐธ์™ธ
print(fruits[2]) # ์ž๋ชฝ
print(fruits[3]) # ๋ฉœ๋ก 
print(fruits[4]) # IndexError: list index out of range

print(fruits[-1]) # ๋ฉœ๋ก 
print(fruits[-2]) # ์ž๋ชฝ
print(fruits[-3]) # ์ฐธ์™ธ
print(fruits[-4]) # ์ˆ˜๋ฐ•
print(fruits[-5]) # IndexError: list index out of range

 ๋ฆฌ์ŠคํŠธ ํƒ€์ž…์œผ๋กœ ์ •์˜๋œ ๋ฐ์ดํ„ฐ๋Š” ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋Œ€๊ด„ํ˜ธ([])์— ์ธ๋ฑ์Šค๋ฅผ ๋„ฃ์–ด์„œ ๊ฐ’์„ ํ˜ธ์ถœ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ๊ฐ’์„ ํ˜ธ์ถœํ•  ๋•Œ ์ฃผ์˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๊ฐ€ 4์ธ ๊ฒฝ์šฐ ์ธ๋ฑ์Šค๋Š” 0 ~ 3๊นŒ์ง€์ด๊ณ  4๋ฅผ ๋„ฃ์–ด์„œ ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

 

Python์—๋Š” ์Œ์ˆ˜์˜ ์ธ๋ฑ์Šค๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–‘์ˆ˜ ์ธ๋ฑ์Šค์™€๋Š” ๋ฐ˜๋Œ€๋กœ -1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ณ  ๋ฆฌ์ŠคํŠธ์˜ ๋์—์„œ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

 

 

List ๋ฐ์ดํ„ฐ ๋‚ด์žฅ๋œ ํ•จ์ˆ˜๋กœ ์ œ์–ด

# ๊ณผ์ผ์„ ๋‹ด์€ ๋ฆฌ์ŠคํŠธ
fruits = ['์ˆ˜๋ฐ•', '์ฐธ์™ธ', '์ž๋ชฝ', '๋ฉœ๋ก ']

# ๋ฆฌ์ŠคํŠธ ๋์— ์ถ”๊ฐ€
fruits.append('๋ง๊ณ ')
print(fruits) # ['์ˆ˜๋ฐ•', '์ฐธ์™ธ', '์ž๋ชฝ', '๋ฉœ๋ก ', '๋ง๊ณ ']

# ๋ฆฌ์ŠคํŠธ ํŠน์ • ์œ„์น˜์— ์‚ฝ์ž… --> ์ง€์ •ํ•œ ์ธ๋ฑ์Šค์— ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.
fruits.insert(2, '๋ง๊ณ ')
print(fruits) # ['์ˆ˜๋ฐ•', '์ฐธ์™ธ', '๋ง๊ณ ', '์ž๋ชฝ', '๋ฉœ๋ก ', '๋ง๊ณ ']

# ๋ฆฌ์ŠคํŠธ์—์„œ ๊ฐ’์œผ๋กœ ์ œ๊ฑฐ(์ฒซ๋ฒˆ ์งธ ๊ฐ’ ๋งŒ ์ œ๊ฑฐ๋œ๋‹ค)
fruits.remove('๋ง๊ณ ')
print(fruits) # ['์ˆ˜๋ฐ•', '์ฐธ์™ธ', '์ž๋ชฝ', '๋ฉœ๋ก ', '๋ง๊ณ ']

# ๋ฆฌ์ŠคํŠธ์—์„œ ์ธ๋ฑ์Šค๋กœ ๊ฐ’ ์ œ๊ฑฐํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•œ๋‹ค
print(fruits.pop(4)) # ๋ง๊ณ 
print(fruits) # ['์ˆ˜๋ฐ•', '์ฐธ์™ธ', '์ž๋ชฝ', '๋ฉœ๋ก ']

# ๋ฆฌ์ŠคํŠธ ์—ญ์ˆœ์œผ๋กœ ์žฌ๋ฐฐ์น˜ํ•œ๋‹ค.
fruits.reverse()
print(fruits) # ['๋ฉœ๋ก ', '์ž๋ชฝ', '์ฐธ์™ธ', '์ˆ˜๋ฐ•']

# ๋ฆฌ์ŠคํŠธ์˜ ๋ชจ๋“  ๊ฐ’์„ ์ œ๊ฑฐํ•œ๋‹ค.
fruits.clear()
print(fruits) # []

๋ฆฌ์ŠคํŠธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด์žฅ๋˜์–ด ์žˆ๋Š” ํ•จ์ˆ˜๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ๊ฐ ์„ค๋ช…์€ ์‹ค์Šต์œผ๋กœ ๋Œ€์ฒดํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

Python Slicing ๊ฐœ๋…

Python์—๋Š” List ์ฒ˜๋Ÿผ ์—ฐ์†์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ–๋Š” ๊ฐ์ฒด๋“ค์— slicing์ด๋ผ๋Š” ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. slicing์€ ์ž๋ฅด๋‹ค์˜ ์˜๋ฏธ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š”๋ฐ... ๋ง ๊ทธ๋Œ€๋กœ ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•ด์„œ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ ์ž…๋‹ˆ๋‹ค.

 

start : slicing์˜ ์‹œ์ž‘ ์œ„์น˜ (ํ•ด๋‹น ์ธ๋ฑ์Šค๋Š” ํฌํ•จํ•œ๋‹ค.)

end : sliceing์˜ ๋ ์œ„์น˜ (ํ•ด๋‹น ์ธ๋ฑ์Šค๋Š” ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค.)

step : ํญ (์ธ๋ฑ์Šค์˜ ์ฐจ์ด)

 

# ๊ณผ์ผ์„ ๋‹ด์€ ๋ฆฌ์ŠคํŠธ
fruits = ['์ˆ˜๋ฐ•', '์ฐธ์™ธ', '์ž๋ชฝ', '๋ฉœ๋ก ']

# ์ธ๋ฑ์Šค 2 ์ „๊นŒ์ง€ ๋ฒ”์œ„๋กœ ํ•œ๋‹ค.
print(fruits[:2]) # ['์ˆ˜๋ฐ•', '์ฐธ์™ธ']

# ์ธ๋ฑ์Šค 2๋ฅผ ํฌํ•จํ•ด์„œ ๋๊นŒ์ง€ ๋ฒ”์œ„๋กœ ํ•œ๋‹ค.
print(fruits[2:]) # ['์ž๋ชฝ', '๋ฉœ๋ก ']

# ์ธ๋ฑ์Šค 1๋ถ€ํ„ฐ 4 ์ „๊นŒ์ง€ ๋ฒ”์œ„๋กœ ํ•œ๋‹ค.
print(fruits[1:4]) # ['์ฐธ์™ธ', '์ž๋ชฝ', '๋ฉœ๋ก ']

# ์ธ๋ฑ์Šค 0 ๋ถ€ํ„ฐ 4 ์ „๊นŒ์ง€ ๋ฒ”์œ„๋กœ ์žก๊ณ  2๊ฐœ์”ฉ ๊ฑด๋„ˆ ๋›ด๋‹ค.
print(fruits[0:4:2]) # ['์ˆ˜๋ฐ•', '์ž๋ชฝ']

์˜ˆ์ œ๋ฅผ ํ†ตํ•ด์„œ ์ตํžŒ๋‹ค.

 

๋‹ค๋ฅธ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์…จ์œผ๋ฉด ๋Š๋ผ์‹œ๊ฒ ์ง€๋งŒ... ์ด๋Ÿฐ ๋ฌธ์ž์—ด ๊ด€๋ จ์ œ์–ด๋Š” Python์ด ๋ฌธ๋ฒ•์ ์œผ๋กœ ์ •๋ง ์‰ฝ๊ฒŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Python์—์„œ ํ•œ์ค„์ด๋ฉด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ๋Š” 4~5 ์ค„ ์ •๋„ ์ž‘์„ฑํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

 

 

del ์˜ˆ์•ฝ์–ด

์ธ๋ฑ์Šค๋กœ ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ’์„ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ del ์˜ˆ์•ฝ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌ์ŠคํŠธ์˜ pop ๋ฉ”์†Œ๋“œ์™€์˜ ์ฐจ์ด๋Š” ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์ฃผ์ง€ ์•Š๋Š” ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  slicing์„ ํ†ตํ•ด์„œ ๋ฒ”์œ„๋กœ ๊ฐ’์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

# ๊ณผ์ผ์„ ๋‹ด์€ ๋ฆฌ์ŠคํŠธ
fruits = ['์ˆ˜๋ฐ•', '์ฐธ์™ธ', '์ž๋ชฝ', '๋ฉœ๋ก ']

# ์ธ๋ฑ์Šค 1์˜ ๊ฐ’์„ ์‚ญ์ œํ•œ๋‹ค.
del fruits[1]
print(fruits) # ['์ˆ˜๋ฐ•', '์ž๋ชฝ', '๋ฉœ๋ก ']

# ์ธ๋ฑ์Šค 1๋ถ€ํ„ฐ 3 ์ „๊นŒ์ง€์˜ ๋ฒ”์œ„๋ฅผ ์‚ญ์ œํ•œ๋‹ค.
del fruits[1:3]
print(fruits) # ['์ˆ˜๋ฐ•']

# ๋ฆฌ์ŠคํŠธ์˜ ๋ชจ๋“  ๊ฐ’์„ ์‚ญ์ œํ•œ๋‹ค. --> clearํ•จ์ˆ˜์™€ ๋™๋“ฑํ•ฉ๋‹ˆ๋‹ค.
del fruits[:]
print(fruits) # []

์‹ค์Šต์„ ํ†ตํ•ด ํ™•์ธํ•œ๋‹ค.

 

 

List ํƒ€์ž… ์ฐธ์กฐ

x = 100
print(id(x)) # 4427777488

y = 100
print(id(y)) # 4427777488

 

Python์—์„œ๋Š” ๋ชจ๋“  ๊ฒƒ์ด ์˜ค๋ธŒ์ ํŠธ๋กœ ๋˜์–ด ์žˆ๋‹ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ 100์ด๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ๋‘๊ฐœ์˜ ๋ณ€์ˆ˜๊ฐ€ ๋ฐ”๋ผ๋ณด๋ฉด ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๋ฐ”๋ผ๋ด…๋‹ˆ๋‹ค. ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•ด์„œ ์‚ฌ์šฉํ•  ๋•Œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋งŒ... ๋‹ค๋งŒ ์กฐ๊ธˆ ๋‹ค๋ฅด๊ฒŒ ์ดํ•ดํ•ด์•ผํ•˜๋Š” ๋ถ€๋ถ„์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

x = [1, 2, 3]
print(id(x)) # 4330506944

y = [1, 2, 3]
print(id(y)) # 4330825600

๋ณ€์ˆ˜์— ์ˆซ์žํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ํ• ๋‹นํ•ด์คฌ์„ ๋•Œ์™€ ๋‹ฌ๋ฆฌ... ๋˜‘๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์€ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ๊ฐ x์™€ y์— ํ• ๋‹นํ•ด ์คฌ์„ ๋•Œ... ๋‘˜์€ ๊ฐ™์€ ๊ฐ์ฒด์ผ๊นŒ์š”? ์ •๋‹ต์€ ๋‹ค๋ฅธ ๊ฐ์ฒด ์ž…๋‹ˆ๋‹ค. ์ด๋Š” Python์—์„œ ๋‚ด๋ถ€์ ์œผ๋กœ list ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋กœ ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”ํ•ด์ฃผ๋ฉด ๋ฌด์กฐ๊ฑด ๋ฉ”๋ชจ๋ฆฌ์— ์ƒˆ๋กญ๊ฒŒ ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜๊ฒŒ๋” ํ•œ ๊ฒƒ์ด๊ณ  ์ด๋ ‡๊ฒŒ ํ•ด์•ผํ•˜๋Š” ์ด์œ ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

x = [1, 2, 3]
y = x

y.append(4)
print(x) # [1, 2, 3, 4]
print(y) # [1, 2, 3, 4]

x๋ผ๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ์ดˆ๊ธฐํ™” ์‹œ์ผœ์ฃผ๊ณ  y๋ผ๋Š” ๋ณ€์ˆ˜์— x์™€ ๋˜‘๊ฐ™์€ ๊ฐ’์ด ๋“ค์–ด๊ฐ€๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด ์คฌ์Šต๋‹ˆ๋‹ค. x์™€ y๋Š” ๋”ฐ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผํ•˜๋Š”๋ฐ... x์™€ y๋Š” ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—  y๋ฅผ ๋ณ€๊ฒฝํ–ˆ๋Š”๋ฐ x๋„ ๋ณ€๊ฒฝ๋œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ์ฃ . ์ˆซ์žํ˜• ๋ฐ์ดํ„ฐ ํƒ€์ž…์ฒ˜๋Ÿผ ๋งŒ์•ฝ ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ’์ด ๊ฐ™์„ ๋•Œ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋ฉด... ์œ„์™€ ๊ฐ™์ด ๋ณ€๊ฒฝ๋˜๋ฉด ์•ˆ๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฒ„๋ฆฌ๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฆฌ์ŠคํŠธ๋Š” ์ดˆ๊ธฐํ™” ํ•ด์ค„ ๋•Œ ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

 

x = [1, 2, 3]

# ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ ๋ฆฌ์ŠคํŠธ ๋ณต์‚ฌ
y = x.copy()
y.append(4)

# slicing์„ ์ด์šฉํ•œ ๋ฆฌ์ŠคํŠธ ๋ณต์‚ฌ
z = x[:]
z.append(5)

print(x) # [1, 2, 3, 4]
print(y) # [1, 2, 3]
print(z) # [1, 2, 3, 5]

์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ณ„๊ฐœ์˜ ๊ฐ์ฒด๋กœ ๋ณต์‚ฌํ•˜๊ธฐ ์œ„ํ•ด Python์—์„œ๋Š” ์œ„์™€ ๊ฐ™์ด 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

๋ฆฌ์ŠคํŠธ ์—ฐ์‚ฐ

w = [1, 2, 3]
print(id(w)) # 4528143040

x = [3, 4, 5]
print(id(x)) # 4528461952

y = w + x
print(y) # [1, 2, 3, 3, 4, 5]
print(id(y)) # 4528462016

z = y * 2
print(z) # [1, 2, 3, 3, 4, 5, 1, 2, 3, 3, 4, 5]
print(id(z)) # 4528143232

๋ฆฌ์ŠคํŠธ์—์„œ๋Š” ๋”ํ•˜๊ธฐ์™€ ๊ณฑ์…ˆ ์—ฐ์‚ฐ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌ์ŠคํŠธ์— ์—ฐ์‚ฐ์„ ํ•˜๋Š” ๊ฒฝ์šฐ ๊ธฐ์กด ๊ฐ์ฒด์˜ ๊ฐ’์„ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ... ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹นํ•ด์„œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•ด์ค๋‹ˆ๋‹ค.

 

 

immutable๊ณผ mutable

๋ฐ์ดํ„ฐ ํƒ€์ž…์— ๋Œ€ํ•œ ๊ธ€์—์„œ ์ˆซ์ž, ๋ฌธ์žํ˜• ๋ฐ์ดํ„ฐ๋Š” ๋ณ€ํ•  ์ˆ˜ ์—†๋Š”(immutable) ๋ฐ์ดํ„ฐ๋ผ๊ณ  ์„ค๋ช…ํ•œ ์  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌ์ŠคํŠธ์˜ ๊ฒฝ์šฐ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š”(mutable) ๋ฐ์ดํ„ฐ ์ž…๋‹ˆ๋‹ค.

 

x = [1, 2, 3]
print(id(x)) # 4377230016
x.append(4)
print(id(x)) # 4377230016

์˜ˆ์ œ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด... ๋ฆฌ์ŠคํŠธ์— 4๋ฅผ ๋„ฃ์–ด์ค˜์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ฐ์ฒด์˜ ์ฃผ์†Œ๋Š” ๊ทธ๋Œ€๋กœ ๋˜‘๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ๊ฒŒ mutableํ•˜๋‹ค๋Š” ๋œป ์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ์—๋Š” mutableํ•œ ๋ฆฌ์ŠคํŠธ์™€ immutableํ•œ ๋ฌธ์žํ˜• ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๋น„๊ตํ•ด์„œ ์ดํ•ด๋ฅผ ๋•๊ฒ ์Šต๋‹ˆ๋‹ค.

 

# mutableํ•œ list
x = [1, 2, 3]
print(id(x)) # 4425165504
x[-1] = 5 
print(x) # [1, 2, 5]
print(id(x)) # 4425165504

# immutableํ•œ ๋ฌธ์žํ˜• ํƒ€์ž…
text = 'myjamong'
print(text[-1]) # g
text[-1] = 'a' # TypeError: 'str' object does not support item assignment

์˜ˆ์ œ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ๋ฆฌ์ŠคํŠธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ–ˆ์„ ๋•Œ ๋˜‘๊ฐ™์€ ๊ฐ์ฒด ์ฃผ์†Œ๋ฅผ ๋ฐ”๋ผ๋ณด๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ฆฌ์ŠคํŠธ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ mutableํ•˜๊ธฐ ๋•Œ๋ฌธ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ฌธ์žํ˜• ๋ฐ์ดํ„ฐ์ธ text ๋ณ€์ˆ˜๋Š” ํƒ€์ž… ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์žํ˜• ๋ฐ์ดํ„ฐ๋„ ๋ฆฌ์ŠคํŠธ์ฒ˜๋Ÿผ ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•ด์„œ ๋ฌธ์ž์—ด์˜ ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋Š”๋ฐ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์€ ์•ˆ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฌธ์žํ˜• ๋ฐ์ดํ„ฐ ํƒ€์ž…์€ immutableํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

 

List์˜ ๋‹ค์–‘์„ฑ

x = [1, 2.5, '์ž๋ชฝ', [1, 2, 3]]

Python์˜ List๋Š” ํƒ€์ž…์— ๋Œ€ํ•œ ์ œํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค. Java๋‚œ C์˜ ๊ฒฝ์šฐ ํ•˜๋‚˜์˜ ๋ฐฐ์—ด์—๋Š” ํ•œ ๊ฐ€์ง€ ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋งŒ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š”๋ฐ Python์—์„œ๋Š” ๋ชจ๋“  ํƒ€์ž…์„ ๊ฐ™์ด ๋“ค๊ณ  ์žˆ๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์˜ ์˜ˆ์‹œ์ฒ˜๋Ÿผ ์ •์ˆ˜, ์‹ค์ˆ˜, ๋ฌธ์ž์—ด, ๋ฆฌ์ŠคํŠธ์•ˆ์— ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ™์ด ๋ฆฌ์ŠคํŠธ์— ๋„ฃ์–ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

list_2d = [
    [1, 2, 3],
    [4, 5],
    [7, 8, 9]
]

๋ฐฐ์—ด์•ˆ์— ๋ฐฐ์—ด์„ ์ค‘์ฒฉํ•ด์„œ ๋„ฃ์–ด์„œ 2์ฐจ 3์ฐจ ๋ฐฐ์—ด ๋“ฑ ๊ณ ์ฐจ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

list๋Š” python์œผ๋กœ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ๋ ๊ฒ๋‹ˆ๋‹ค. ๊ทธ๋งŒํผ ์ค‘์š”ํ•˜๋‹ˆ ์ถฉ๋ถ„ํžˆ ์ดํ•ดํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

 

 

x = []
print(x) # []

x = list() # []
print(x)

๋นˆ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„์ง ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด์•ผํ• ์ง€ ์ •ํ•˜์ง€ ์•Š์•˜์„ ๋•Œ ๋นˆ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

Tuple(ํŠœํ”Œ)

Tuple์€ immutableํ•œ list์ž…๋‹ˆ๋‹ค. list์™€ ๋˜‘๊ฐ™์ด ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•ด์„œ ์ฝ์„ ์ˆ˜ ์žˆ๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆœ์ฐจ์ ์œผ๋กœ ๋˜์–ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

 

# ์†Œ๊ด„ํ˜ธ๋ฅผ ์ด์šฉํ•œ ํŠœํ”Œ ์ดˆ๊ธฐํ™”
t = (1, 2, 3, 4, 5)
print(type(t)) # <class 'tuple'>
print(t) # (1, 2, 3, 4, 5)

# ๊ด„ํ˜ธ ์—†๋Š” ํŠœํ”Œ ์ดˆ๊ธฐํ™”
t = 1, 2, 3, 4, 5
print(type(t)) # <class 'tuple'>
print(t) # (1, 2, 3, 4, 5)

๋ฆฌ์ŠคํŠธ๋Š” ๋Œ€๊ด„ํ˜ธ๋ฅผ ์ด์šฉํ•ด์„œ ์„ ์–ธํ–ˆ๋‹ค๋ฉด... ํŠœํ”Œ์„ ์†Œ๊ด„ํ˜ธ๋ฅผ ์ด์šฉํ•˜๊ฑฐ๋‚˜ ๊ด„ํ˜ธ ์—†์ด ์ฝค๋งˆ๋ฅผ ์ด์šฉํ•ด์„œ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌ์ŠคํŠธ์™€๋Š” ๋‹ค๋ฅด๊ฒŒ immutableํ•˜๊ธฐ ๋•Œ๋ฌธ์— append๋‚˜ remove์™€ ๊ฐ™์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ณ  ์ง์ ‘ ์ธ๋ฑ์Šค์— ์ ‘๊ทผํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ• ์ˆ˜๋„ ์—†์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ... ์ด๋Ÿฐ ํŠœํ”Œ์„ ์™œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ์ผ๊นŒ์š”? ์™œ immutableํ•œ list๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ ์ผ๊นŒ์š”?

 

 

Tuple์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

import sys
import timeit

# list ์ƒ์„ฑ ์†๋„
start_time = timeit.default_timer()
l = [1, 2, 3, 4, 5]
print('list ์ƒ์„ฑ ์†๋„ : ', format(timeit.default_timer() - start_time, '.10f'))
# tuple ์ƒ์„ฑ ์†๋„ :  0.0000008920


# tuple ์ƒ์„ฑ ์†๋„
start_time = timeit.default_timer()
t = (1, 2, 3, 4, 5)
print('tuple ์ƒ์„ฑ ์†๋„ : ', format(timeit.default_timer() - start_time, '.10f'))
# tuple ์ƒ์„ฑ ์†๋„ :  0.0000005320

"""
list  : 0.0000008920
tuple : 0.0000005320
--> tuple์ด list๋ณด๋‹ค ์•ฝ 40% ๋น ๋ฅด๋‹ค.
"""


# list ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ์†๋„
start_time = timeit.default_timer()
print(l[1]) # 2
print('list ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ์†๋„ : ', format(timeit.default_timer() - start_time, '.10f'))
# list ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ์†๋„ :  0.0000039290


# tuple ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ์†๋„
start_time = timeit.default_timer()
print(t[1]) # 2
print('tuple ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ์†๋„ : ', format(timeit.default_timer() - start_time, '.10f'))
# tuple ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ์†๋„ :  0.0000029280
"""
list  : 0.0000039290
tuple : 0.0000029280
--> tuple ์ด list๋ณด๋‹ค ์•ฝ 25% ๋น ๋ฅด๋‹ค.
"""


# ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ ๋น„๊ต
print('list์˜ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ : ', sys.getsizeof(l)) # list์˜ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ :  120
print('tuple์˜ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ : ', sys.getsizeof(t)) # tuple์˜ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ :  80
"""
list  : 120
tuple : 80
--> tuple์ด list ๋ณด๋‹ค ์•ฝ 33% ๋ฉ”๋ชจ๋ฆฌ ์šฉ๋Ÿ‰์„ ๋œ ์ฐจ์ง€ํ•œ๋‹ค.
"""

 ์„ฑ๋Šฅ์˜ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํฐ ์ฐจ์ด ์ž…๋‹ˆ๋‹ค. list์™€๋Š” ๋‹ค๋ฅด๊ฒŒ tuple์€ immutableํ•˜๊ธฐ ๋•Œ๋ฌธ์— append๋‚˜ remove์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ์–ดํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ์ฒด์—์„œ ๊ฐ–๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๋ณด๋‹ˆ ๋ฉ”๋ชจ๋ฆฌ์—์„œ๋Š” ์ƒ๋Œ€์ ์€ ์ ์€ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๊ณ  ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ํƒ์ƒ‰ํ•  ๋•Œ ๋” ์ ์€ ์‹œ๊ฐ„์ด ์†Œ์š”๋ฉ๋‹ˆ๋‹ค.

 

 ์œ„ ์˜ˆ์‹œ ์—์„œ๋Š” sys์™€ timeit ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•ด์„œ list์™€ tuple์˜ ์ƒ์„ฑ ์†๋„, ์ ‘๊ทผ ์†๋„ ๊ทธ๋ฆฌ๊ณ  ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ํฌ๊ธฐ๋ฅผ ๋น„๊ต ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ์˜ ์–‘์ด ํฌ์ง€ ์•Š์•„ ๋งŽ์€ ์ฐจ์ด๋Š” ์—†์ง€๋งŒ... tuple์ด list ๋ณด๋‹ค ๋” ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์œผ๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ํ™œ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ์ˆ˜๋ก ์ฐจ์ด๋Š” ์ ์  ๋ฒŒ์–ด์งˆ ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

 

 ์ด๋Ÿฐ ์ด์œ ๋กœ ์ˆœ์ฐจ์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ... list๋ณด๋‹ค๋Š” tuple์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

tuple์˜ packing๊ณผ unpacking

tuple์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ๋˜์ง€๋งŒ... ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—๋„ ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ tuple์˜ packing๊ณผ unpacking์„ ์ด์šฉํ•  ๋•Œ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

# tuple packing
result = '์ˆ˜ํ•™', 100, '์˜์–ด', 95.5

# tuple unpacking
math, m_score, english, e_score = result


# ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’์„ tuple packing
def report(x, y):
    result = '๋ถˆํ•ฉ๊ฒฉ'
    is_smart = False
    if x + y > 90:
        result = 'ํ•ฉ๊ฒฉ'
        is_smart = True
    return result, is_smart, x + y

# ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’์„ tuple unpacking
pass_result, smart_bool, score = report(50, 45)
print(pass_result, smart_bool, score) # ํ•ฉ๊ฒฉ True 95

packing : ํŠœํ”Œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌถ์–ด์ฃผ๋Š” ๊ฒƒ์„ ํŒจํ‚น์ด๋ผ๊ณ  ํž™๋‹ˆ๋‹ค. ์ฆ‰ ํŠœํ”Œ๋กœ ๋ฐ์ดํ„ฐ๋“ค์„ ํ• ๋‹นํ•ด์ฃผ๋Š” ๊ฒƒ์ด packing ์ž…๋‹ˆ๋‹ค.

unpacking : ํŠœํ”Œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ’€์–ด์„œ ๊ฐ๊ฐ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•ด์ฃผ๋Š” ๊ฒƒ์ด unpacking์ž…๋‹ˆ๋‹ค.

 

์ด๋Ÿฐ tuple์˜ packing๊ณผ unpacking์„ ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ ์ด ํ›„ ๊ธ€์—์„œ ์ž์„ธํžˆ ๋‹ค๋ฃฐ ๊ฒƒ์ด๊ณ  ์ง€๊ธˆ์€ "ํ•จ์ˆ˜๋ž€ ๊ฒƒ์ด ์žˆ๋‹ค" ์ •๋„๋กœ๋งŒ ์ดํ•ดํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์œ„์˜ ์˜ˆ์ œ์—์„œ๋Š” x, y๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•ฉ๊ฒฉ ๋ถˆํ•ฉ๊ฒฉ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ์™€ ๋˜‘๋˜‘ํ•œ์ง€์˜ ์—ฌ๋ถ€์™€ ํ•ฉ์‚ฐ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜(report)๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

 

returnํ•  ๋•Œ 3๊ฐœ์˜ ๊ฐ’(result, is_smart, x + y)์„ packingํ•ด์ฃผ๊ณ  ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด์„œ 3๊ฐœ์˜ ๊ฐ’์„ unpackingํ•ด์„œ 3๊ฐœ์˜ ๋ณ€์ˆ˜์—(pass_result, smart_result, score) ํ• ๋‹นํ•ด์คฌ์Šต๋‹ˆ๋‹ค.

 

 ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ์— ์ž‘์„ฑ๋œ ํ•จ์ˆ˜๋“ค์ด ์ด๋Ÿฐ์‹์œผ๋กœ tuple์˜ packing๊ณผ unpacking์„ ์ด์šฉํ•ด์„œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์ฃผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ž˜ ํ™œ์šฉํ•˜๋ฉด ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

tuple ์‚ฌ์šฉ ์‹œ ์ฃผ์˜์‚ฌํ•ญ

# string type
t = 'jamong'
print(type(t)) # <class 'str'>

# tuple type
t = 'jamong',
print(type(t)) # <class 'tuple'>

๋ฐ์ดํ„ฐ๊ฐ€ ํ•˜๋‚˜๋งŒ ๋“ค์–ด ์žˆ๋Š” ํŠœํ”Œ์„ ์ƒ์„ฑํ•˜๊ณ  ์†Œ๊ด„ํ˜ธ๋ฅผ ์ด์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๊ผญ ๋์— ','๋ฅผ ๋ถ™์—ฌ์ค˜์•ผํ•œ๋‹ค. ๋ถ™์—ฌ์ฃผ์ง€ ์•Š์œผ๋ฉด ํŠœํ”Œ์ด ์•„๋‹Œ ๋‹ค๋ฅธ ํƒ€์ž…์œผ๋กœ ์ธ์‹ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

# tuple๋‚ด์— mutableํ•œ ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋Š” ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
t = (100, 'text', ['apple', 'lemon'])
t[2][0] = 'grape'
print(t) # (100, 'text', ['grape', 'lemon'])

# tuple์˜ ๋ฐ์ดํ„ฐ๋Š” immutableํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
t[2] = ['watermelon'] # TypeError: 'tuple' object does not support item assignment

Python์˜ ๋ชจ๋“  ๊ฒƒ์ด ์˜ค๋ธŒ์ ํŠธ๋กœ ๋˜์–ด ์žˆ๋Š” ํŠน์ง•์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—... ์œ„์— ์ฒ˜๋Ÿผ tuple๋‚ด์˜ mutableํ•œ ๋ฐ์ดํ„ฐ๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•”์‹œ์ ์œผ๋กœ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. tuple์˜ ๊ฐ’๋“ค์ด ๊ฐ ๊ฐ์ฒด๊ธฐ ๋•Œ๋ฌธ์—... ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ  ๊ฐ์ฒด ๋‚ด๋ถ€์˜ ๊ฐ’๋“ค์„ ๋ณ€๊ฒฝํ•˜๋Š” mutableํ•œ ๋ฐ์ดํ„ฐ๋ผ๋ฉด ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๊ฒ ์ฃ ?

 

Set(์„ธํŠธ)

์„ธํŠธ๋Š” ์ˆœ์„œ๊ฐ€ ์—†๊ณ  ์ค‘๋ณต์ด ์—†๋Š” ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค. ๊ณผ์ผ ๊ฐ€๊ณ„์—์„œ ํŒ๋งคํ•˜๊ณ  ์žˆ๋Š” ๊ณผ์ผ๋“ค์˜ ์ข…๋ฅ˜๋ฅผ ์•Œ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค๋˜๊ฐ€... ํšŒ์‚ฌ์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ์ข…๋ฅ˜๊ฐ€ ์–ด๋–ค๊ฒƒ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋“ฑ ์ค‘๋ณต์„ ์—†์• ๊ณ  ์กด์žฌํ•˜๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋งŽ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

fruits = {'apple', 'lemon', 'watermelon', 'apple'}
print(type(fruits)) # <class 'set'>
print(fruits) # {'lemon', 'watermelon', 'apple'} ์ˆœ์„œ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์ถœ๋ ฅ์ด ๋งค๋ฒˆ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

# ๋นˆ ์„ธํŠธ๋Š” ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
d = {}
print(type(d)) # <class 'dict'>

s = set()
print(type(s)) # <class 'set'>
print(s) # set()

 ์„ธํŠธ๋Š” ์ค‘๊ด„ํ˜ธ๋ฅผ ์ด์šฉํ•ด์„œ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ... ๋’ค์—์„œ ์•Œ์•„๋ณผ dictionary ํƒ€์ž…๋„ ์ค‘๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋นˆ ์„ธํŠธ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋Š” setํ•จ์ˆ˜๋ฅผ ๊ผญ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์œ„ ์˜ˆ์ œ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด  fruits ์„ธํŠธ์—์„œ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ณ  ์ˆœ์„œ๋„ ๋งค๋ฒˆ ์‹คํ–‰ํ•  ๋•Œ ๋งˆ๋‹ค ๋‹ค๋ฅธ ๊ฐ’์„ ์–ป๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

Set ๋‚ด์žฅ ํ•จ์ˆ˜ ์ œ์–ด

set๋„ mutable ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

fruits = {'apple', 'lemon', 'watermelon', 'apple'}
print(fruits) # {'lemon', 'watermelon', 'apple'} ์ˆœ์„œ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์ถœ๋ ฅ์ด ๋งค๋ฒˆ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.


# ์„ธํŠธ์— ์ถ”๊ฐ€ํ•˜๊ธฐ
fruits.add('melon')
print(fruits) # {'apple', 'melon', 'lemon', 'watermelon'}


# ์„ธํŠธ์— ๋ชจ๋“  ์—˜๋Ÿฌ๋ฉ˜ํŠธ ์ถ”๊ฐ€ํ•˜๊ธฐ
fruits.update(['grape', 'watermelon', 'mango'])
print(fruits) # {'melon', 'apple', 'lemon', 'mango', 'grape', 'watermelon'}


# ์„ธํŠธ์—์„œ ์ œ๊ฑฐํ•˜๊ธฐ(๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์€ ๊ฐ’์ด ์„ธํŠธ์— ์—†์œผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.)
fruits.remove('grape')
print(fruits) # {'apple', 'watermelon', 'lemon', 'mango', 'melon'}
# fruits.remove('grape') # KeyError: 'grape'


# ์„ธํŠธ์—์„œ ์ œ๊ฑฐํ•˜๊ธฐ(๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์€ ๊ฐ’์ด ์„ธํŠธ์— ์žˆ์œผ๋ฉด ์‚ญ์ œํ•œ๋‹ค. ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.)
fruits.discard('watermelon')
print(fruits) # {'lemon', 'melon', 'mango', 'apple'}
fruits.discard('watermelon')


# ์„ธํŠธ์—์„œ ๋ฌด์ž‘์œ„๋กœ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์ œ๊ฑฐํ•œ๋‹ค.
print(fruits.pop()) # ๋ฌด์ž‘์œ„๋กœ ๊ฐ’์ด ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ๊ฐ’์ด ๋‚˜์˜ฌ์ง€ ๋ชจ๋ฅธ๋‹ค.


# ์„ธํŠธ์—์„œ ๋ชจ๋“  ๊ฐ’์„ ์ œ๊ฑฐํ•œ๋‹ค.
fruits.clear()
print(fruits) # set()

ํ•จ์ˆ˜๋“ค์€ ์‹ค์Šต์„ ํ†ตํ•ด ํ™•์ธํ•œ๋‹ค.

 

 

์„ธํŠธ์˜ ์ง‘ํ•ฉ ์—ฐ์‚ฐ

Python์˜ ์„ธํŠธ๋Š” ์—ฐ์‚ฐ๊ธฐํ˜ธ๋“ค์„ ํ†ตํ•ด์„œ ์ง‘ํ•ฉ์— ๋Œ€ํ•œ ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

fruits1 = {'apple', 'lemon', 'watermelon', 'apple'}
fruits2 = {'apple', 'lemon'}
fruits3 = {'apple', 'lemon'}
fruits4 = {'apple', 'grape'}

"""
๋น„๊ต ์—ฐ์‚ฐ์œผ๋กœ ํฌ๋‹ค ์ž‘๋‹ค์˜ ๊ฐœ๋…์œผ๋กœ ์ดํ•ดํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. subset
์ดํ•˜, ์ด์ƒ --> ๊ฐ™์€ ๊ฒฝ์šฐ๋ฅผ ํฌํ•จ
์ดˆ๊ณผ, ๋ฏธ๋งŒ --> ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ๋ฏธํฌํ•จ
"""
# fruits1์ด fruits2์˜ ์ƒ์œ„์ง‘ํ•ฉ์ธ๊ฐ€?
print(fruits1 >= fruits2) # True
print(fruits1 > fruits2) # True

# fruits1์ด fruits2์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ์ธ๊ฐ€?
print(fruits1 <= fruits2) # False
print(fruits1 < fruits2) # False

# fruits2๊ฐ€ fruits3์˜ ์ƒ์œ„ ์ง‘ํ•ฉ์ธ๊ฐ€?
print(fruits2 >= fruits3) # True
# ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” False
print(fruits2 > fruits3) # False


# ํ•ฉ์ง‘ํ•ฉ
print(fruits2 | fruits4) # {'grape', 'lemon', 'apple'}


# ๊ต์ง‘ํ•ฉ
print(fruits2 & fruits4) # {'apple'}


# ์ฐจ์ง‘ํ•ฉ
print(fruits1 - fruits2) # {'watermelon'}


# ์—ฌ์ง‘ํ•ฉ
print(fruits1 ^ fruits4) # {'grape', 'watermelon', 'lemon'}

์‹ค์Šต์„ ํ†ตํ•ด ์ง์ ‘ ํ™•์ธํ•ด๋ณธ๋‹ค.

 

 

Dictionary(๋”•์…”๋„ˆ๋ฆฌ)

๋‹ค๋ฅธ ์–ธ์–ด์—์„œ์˜ Map์ด๋ผ๋Š” ์˜ค๋ธŒ์ ํŠธ์™€ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์ž…๋‹ˆ๋‹ค. key, value๋ฅผ ์Œ์œผ๋กœ ๊ตฌ์„ฑ๋œ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค. list๋‚˜ tuple์€ ์ธ๋ฑ์Šค๊ฐ€ ์ˆซ์ž์˜ ํ˜•ํƒœ๋กœ ๋˜์–ด ์žˆ๋Š”๋ฐ dictionary์˜ ๊ฒฝ์šฐ ์ธ๋ฑ์Šค๋ฅผ ๋ฌธ์žํ˜•์ด๋‚˜ ์ˆซ์žํ˜•์ฒ˜๋Ÿผ immutableํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์œผ๋กœ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆซ์ž๋ณด๋‹ค๋Š” ๋ฌธ์žํ˜•์œผ๋กœ key๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

d = {
    'red': 'apple'
    ,'yellow': 'lemon'
    ,'purple': 'grape'
    ,'orange': 'mango'
}

print(type(d)) # <class 'dict'>

์ค‘๊ด„ํ˜ธ๋ฅผ ์ด์šฉํ•ด์„œ Dictionary๋ฅผ ์„ ์–ธํ•ด ์ค„ ์ˆ˜ ์žˆ๊ณ  ์„ธ๋ฏธ์ฝœ๋ก (:)๋ฅผ ๊ธฐ์ค€์œผ๋กœ key:value ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

 

Dictionary ์ฝ๊ธฐ

d = {
    'name': 'tom',
    'age': 30,
    'items': {
        'pockets': 3,
        'baskets': [
            [
                'grape',
                'lemon'
            ],
            [
                'apple',
                'watermelon'
            ]
        ]
    },
    1: 25
}

print(d['name']) # tom
print(d['items']['pockets']) # 3
print(d['items']['baskets'][1]) # ['apple', 'watermelon']
print(d[1]) # 25

dictionary๋Š” key์˜ ๊ฐ’๋งŒ mutableํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์œผ๋กœ ์ง€์ •ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. value๋กœ๋Š” ์ˆซ์žํ˜•, ๋ฌธ์žํ˜•๊ณผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด๋‚˜ list, set๊ณผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ๋“ค์–ด๊ฐˆ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.  dictionary์˜ key๊ฐ€ index์˜ ์—ญํ• ์„ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— list๋ฅผ ์ฝ์—ˆ๋˜ ๋ฐฉ๋ฒ•์ฒ˜๋Ÿผ ๋Œ€๊ด„ํ˜ธ๋ฅผ ์ด์šฉํ•ด์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

Dictionary ์ƒ์„ฑ ์˜ˆ์ œ

a = {'name': 'jamong', 'age': 30}
b = dict(name='jamong', age=30)
c = dict(zip(['name', 'age'], ['jamong', 30]))
d = dict([('name', 'jamong'), ('age', 30)])
e = dict({'age': 30}, name='jamong')

print(a == b == c == d == e) # True

dict ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์œผ๋กœ dictionary๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

Dictionary ๋ฐ์ดํ„ฐ ์ œ์–ด

d = {'name': 'tom'}

# dictionary ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€
d['age'] = 30 # {'name': 'tom', 'age': 30}
print(d)

# dictionary ๋ฐ์ดํ„ฐ ์‚ญ์ œ
del d['name']
print(d) # {'age': 30}

dictionary์˜ key๊ฐ’์„ ์ด์šฉํ•ด์„œ ์ง์ ‘ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

del ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ dictionary ๊ฐ’์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

Dictionary ํ•จ์ˆ˜๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ œ์–ด

d = {
    'name': 'tom',
    'age': 30
}

# dictionary์— key์˜ ์กด์žฌ์—ฌ๋ถ€ ํ™•์ธ
print('name' in d) # True
print('name' not in d) # False


# dictionary (key, value) ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ ์ถ”์ถœ
print(d.items()) # dict_items([('name', 'tom'), ('age', 30)])


# dictionary key ๊ฐ’๋“ค์„ ์ถ”์ถœํ•œ๋‹ค.
print(d.keys()) # dict_keys(['name', 'age'])


# dictionary value ๊ฐ’๋“œ์„ ์ถ”์ถœํ•œ๋‹ค.
print(d.values()) # dict_values(['tom', 30])


# dictionary์˜ value๋ฅผ key๊ฐ’์œผ๋กœ๋ถ€ํ„ฐ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.
# key๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ default๋กœ None์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  2๋ฒˆ์งธ ์ธ์ž๋ฅผ ์ง€์ •ํ•ด์ฃผ๋ฉด ํ•ด๋‹น ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
print(d.get('name')) # tome
print(d.get('height')) # None
print(d.get('height', 123)) # 123


# dictionary์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค.
# ์ด๋ฏธ ์กด์žฌํ•˜๋Š” key์ด๋ฉด overwriteํ•˜๊ณ  ์—†์œผ๋ฉด ์ถ”๊ฐ€ํ•œ๋‹ค.
d.update({'age': 20})
print(d) # {'name': 'tom', 'age': 20}


# key์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  dictionary์—์„œ ์‚ญ์ œํ•œ๋‹ค.
# key๊ฐ€ ์—†์œผ๋ฉด ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.
# 2๋ฒˆ์งธ ์ธ๊ฐ€์ž ์ง€์ •๋˜์–ด ์žˆ์œผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ์•„๋‹Œ ํ•ด๋‹น ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
# popitem ํ•จ์ˆ˜๋Š” ๊ฐ™์€ ๊ธฐ๋Šฅ์ด์ง€๋งŒ ๊ฐ’์ด ์•„๋‹Œ key:value ์•„์ดํ…œ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
print(d.pop('age')) # 20
print(d) # {'name': 'tom'}
print(d.pop('age')) # KeyError: 'age'
print(d.pop('age', 123)) # 123


# dictionary ๋ฐ์ดํ„ฐ ๋ชจ๋‘ ์‚ญ์ œ
d.clear()
print(d) # {}

์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•œ๋‹ค.

 

 

dictionary vs list

 list๋Š” ์ˆซ์žํ˜•ํƒœ๋กœ ์ธ๋ฑ์Šค๊ฐ€ ๋ถ€์—ฌ๋˜๊ณ  dictionary๋Š” key ํ˜•ํƒœ์˜ ์ธ๋ฑ์Šค๋ฅผ ์ง์ ‘ ์„ค์ •ํ•ด์ค๋‹ˆ๋‹ค. dictionary์˜ ๊ฒฝ์šฐ ๋ฌธ์žํ˜•ํƒœ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ˆซ์žํ˜•ํƒœ๋กœ๋„ key๋ฅผ ์ง€์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋Š”๋ฐ... ๊ทธ๋Ÿผ key๊ฐ’์„ ์ˆซ์žํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์–ด๋–ค ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ• ๊นŒ์š”?

 

 ์šฐ์„  ์„ฑ๋Šฅ์ ์œผ๋กœ ๋ดค์„ ๋•Œ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋Š” ์†๋„๋Š” dictionary๋ณด๋‹ค๋Š” list๊ฐ€ ํ›จ์”ฌ ๋น ๋ฆ…๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆœ์ฐจ์ ์ธ ๋ฒˆํ˜ธ๋กœ ์ธ๋ฑ์‹ฑ๋˜์–ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด list๋‚˜ tuple์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

 

 

์ •๋ฆฌ

  • ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋Š” ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ
  • List๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ €์žฅํ•˜๊ณ  mutableํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ
  • python์—์„œ๋Š” ์Œ์ˆ˜ ์ธ๋ฑ์Šค ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • slicing ๊ธฐ๋Šฅ์„ ์ด์šฉํ•ด์„œ  ํŽธ๋ฆฌํ•˜๊ฒŒ  ๋ฒ”์œ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค
  • ๋ณ€์ˆ˜์— ๊ฐ™์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด ์žˆ๋Š” list๋ฅผ ํ• ๋‹นํ•ด๋„ ๋‹ค๋ฅธ ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐ
  • Tuple์€ immutableํ•œ List
  • Tuple์˜ ์„ฑ๋Šฅ์ด list๋ณด๋‹ค ํšจ์œจ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ์ด ํ•„์š”์—†๋‹ค๋ฉด Tuple์„ ์‚ฌ์šฉํ•  ๊ฒƒ
  • Tuple์˜ packing, unpacking์„ ์‚ฌ์šฉํ•˜๋ฉด ํŽธ๋ฆฌํ•จ
  • Set๋Š” ์ˆœ์„œ๊ฐ€ ์—†๊ณ  ๋ฐ์ดํ„ฐ ์ค‘๋ณต์ด ์—†๋Š” ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ
  • Set๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ ์—ฐ์‚ฐ ๊ฐ€๋Šฅ
  • Dictionary๋Š” ๋ฌธ์ž๋‚˜ ์ˆซ์žํ˜• ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ index๋กœ ํ•˜๋Š” key, value ์Œ์œผ๋กœ ๊ตฌ์„ฑ๋œ ์ง‘ํ•ฉ
  • ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ์†๋„๋Š” dictionary๋ณด๋‹ค list๊ฐ€ ๋” ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ˆœ์ฐจ์ ์ธ ๋ฒˆํ˜ธ์˜ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด list๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ

๋Œ“๊ธ€