6. [ํŒŒ์ด์ฌ] set๊ณผ frozenset

2026. 3. 7. 00:42ยทPython & SQL/Python Basics
๐Ÿ’ก ๋ณธ ํฌ์ŠคํŒ…์€ ์ˆ˜์—… ๋‚ด์šฉ, ๊ต์žฌ, ChatGPT๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ •๋ฆฌํ•œ ํ•™์Šต ๊ธฐ๋ก์ž…๋‹ˆ๋‹ค.
๊ธ€๊ณผ ๊ทธ๋ฆผ ๋“ฑ ๋ชจ๋“  ์ฝ˜ํ…์ธ ์˜ ์ •๋ฆฌ ๋ฐ ์ž‘์„ฑ์€ ๋ณธ ๋ธ”๋กœ๊ทธ์—์„œ ์ง์ ‘ ์ œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

 

Python ๊ธฐ์ดˆ๋ถ€ํ„ฐ Streamlit ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”๊นŒ์ง€ ์ •๋ฆฌํ•˜๋Š” ํ•™์Šต ๊ธฐ๋ก์ž…๋‹ˆ๋‹ค.

์ด ๊ธ€์€ '6. [ํŒŒ์ด์ฌ] set ๊ณผ frozenset' ์ž…๋‹ˆ๋‹ค.

 

 

ํŒŒ์ด์ฌ์˜ set์€ ์ฒ˜์Œ ๋ณด๋ฉด ๋ฆฌ์ŠคํŠธ์™€ ๋น„์Šทํ•ด ๋ณด์ด์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ์™„์ „ํžˆ ๋‹ค๋ฅธ ๋ชฉ์ ์„ ๊ฐ€์ง„ ์ž๋ฃŒํ˜•์ด๋‹ค.

๋ฆฌ์ŠคํŠธ๊ฐ€ "์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์šฉ๋„"๋ผ๋ฉด,

set์€ "์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ณ  ์›์†Œ์˜ ํฌํ•จ ์—ฌ๋ถ€๋ฅผ ๋น ๋ฅด๊ฒŒ ํ™•์ธํ•˜๋Š” ์šฉ๋„"์— ํ›จ์”ฌ ๊ฐ€๊น๋‹ค.

๊ทธ๋ž˜์„œ ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ, ์ค‘๋ณต ์ œ๊ฑฐ, ๋น„๊ต ์—ฐ์‚ฐ, ํšŒ์›/ํƒœ๊ทธ/๊ถŒํ•œ ์ง‘ํ•ฉ ์ฒ˜๋ฆฌ ๊ฐ™์€ ๊ณณ์—์„œ ๋งค์šฐ ์ž์ฃผ ๋“ฑ์žฅํ•œ๋‹ค.

 

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” set์˜ ํ•ต์‹ฌ ๊ฐœ๋…์„ ์ •๋ฆฌํ•˜๊ณ , ์‹ค๋ฌด๋‚˜ ์ค‘๊ธ‰ ํ•™์Šต ๋‹จ๊ณ„์—์„œ ์•Œ์•„๋‘๋ฉด ์ข‹์€ frozenset, ํ•ด์‹œ ๊ฐ€๋Šฅ์„ฑ(hashable), ๋ถ€๋ถ„์ง‘ํ•ฉ ํŒ๋ณ„ ๊ฐ™์€ ๋‚ด์šฉ๊นŒ์ง€ ํ•จ๊ป˜ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

 

 

set์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€

set์€ '์ˆœ์„œ๊ฐ€ ์—†๊ณ , ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์ž๋ฃŒ๊ตฌ์กฐ'๋‹ค.

์ˆ˜ํ•™์˜ ์ง‘ํ•ฉ ๊ฐœ๋…์„ ๊ทธ๋Œ€๋กœ ์ฝ”๋“œ๋กœ ์˜ฎ๊ฒจ๋†“์€ ํ˜•ํƒœ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค.

 

๊ฐ€์žฅ ๋จผ์ € ์•Œ์•„๋‘˜ ์ ์€ ๋‹ค์Œ ๋‘ ๊ฐ€์ง€๋‹ค.

  • ๊ฐ™์€ ๊ฐ’์ด ์—ฌ๋Ÿฌ๋ฒˆ ๋“ค์–ด์™€๋„ ํ•˜๋‚˜๋งŒ ๋‚จ๋Š”๋‹ค
  • ์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง‘ํ•ฉ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

skills = {"Python", "SQL", "Docker", "Python"}
print(skills)

 

์‹คํ–‰ ๊ฒฐ๊ณผ

{'Python', 'SQL', 'Docker'}

์—ฌ๊ธฐ์„œ "Python"์„ ๋‘ ๋ฒˆ ๋„ฃ์—ˆ์ง€๋งŒ ์‹ค์ œ ์ง‘ํ•ฉ์—๋Š” ํ•œ ๋ฒˆ๋งŒ ๋“ค์–ด๊ฐ„ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹ค๋งŒ ์ฃผ์˜ํ•  ์ ์ด ์žˆ๋‹ค.

set์€ ์ˆœ์„œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ถœ๋ ฅ ์ˆœ์„œ๋Š” ์‹คํ–‰ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ๋ณด์ผ ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰, ์ง‘ํ•ฉ์—์„œ๋Š” "๋ช‡ ๋ฒˆ์งธ์— ๋“ค์–ด ์žˆ๋А๋ƒ"๋ณด๋‹ค "๋ฌด์—‡์ด ๋“ค์–ด ์žˆ๋А๋ƒ"๊ฐ€ ๋” ์ค‘์š”ํ•˜๋‹ค.

 

 

ํ˜•๋ณ€ํ™˜์„ ์ด์šฉํ•œ ์ค‘๋ณต ์ œ๊ฑฐ

set()์„ ์ด์šฉํ•œ ์ค‘๋ณต ์ œ๊ฑฐ๋Š” ๋งค์šฐ ์ž์ฃผ ์“ฐ๋Š” ํŒจํ„ด์ด๋‹ค.

course_names = ["Python", "SQL", "SQL", "Airflow", "Python", "Docker"]
unique_courses = set(course_names)

print(unique_courses)

 

์‹คํ–‰ ๊ฒฐ๊ณผ

{'Python', 'SQL', 'Airflow', 'Docker'}

๋ฆฌ์ŠคํŠธ๋ฅผ set์œผ๋กœ ๋ฐ”๊พธ๋ฉด ์ค‘๋ณต์ด ์ œ๊ฑฐ๋œ๋‹ค.

๋‹ค๋งŒ ์ด ์ˆœ๊ฐ„ ์ˆœ์„œ ์ •๋ณด๋Š” ์œ ์ง€๋˜์ง€ ์•Š๋Š”๋‹ค.

 

๊ทธ๋ž˜์„œ "์ค‘๋ณต์€ ์ œ๊ฑฐํ•˜๋˜, ์ •๋ˆ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ์‹ถ๋‹ค"๋ฉด ๋ณดํ†ต sorted()๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•œ๋‹ค.

cities = ["Seoul", "Busan", "Seoul", "Jeju", "Incheon", "Busan"]
unique_cities = set(cities)
sorted_cities = sorted(unique_cities)

print(sorted_cities)

 

์‹คํ–‰ ๊ฒฐ๊ณผ

['Busan', 'Incheon', 'Jeju', 'Seoul']

์—ฌ๊ธฐ์„œ ๊ธฐ์–ตํ•  ์ ์€ sorted()์˜ ๋ฐ˜ํ™˜๊ฐ’์ด set์ด ์•„๋‹ˆ๋ผ ๋ฆฌ์ŠคํŠธ(list) ๋ผ๋Š” ์ ์ด๋‹ค.

 

์ฆ‰, ํ๋ฆ„์€ ๋‹ค์Œ์ฒ˜๋Ÿผ ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค.

  • set() : ์ค‘๋ณต ์ œ๊ฑฐ
  • sorted() : ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ ๋ฐ˜ํ™˜

 

 

set์˜ ํŠน์ง•: ์ธ๋ฑ์‹ฑ์€ ์•ˆ ๋˜์ง€๋งŒ, ์ˆ˜์ •์€ ๊ฐ€๋Šฅํ•˜๋‹ค

์ง‘ํ•ฉ์€ ์ˆœ์„œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌ์ŠคํŠธ์ฒ˜๋Ÿผ ์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.

tools = {"Git", "Linux", "Docker"}

tools.add("Kubernetes")
tools.discard("Terraform")   # ์—†์–ด๋„ ์—๋Ÿฌ ์—†์Œ
tools.remove("Git")          # ์žˆ์œผ๋ฉด ์ œ๊ฑฐ

print(tools)
print(sorted(tools))

 

์‹คํ–‰ ๊ฒฐ๊ณผ

{'Linux', 'Docker', 'Kubernetes'}
['Docker', 'Kubernetes', 'Linux']

์—ฌ๊ธฐ์„œ discard()์™€ remove()์˜ ์ฐจ์ด๋Š” ๊ผญ ์•Œ์•„๋‘˜ ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

  • discard() : ์›์†Œ๊ฐ€ ์—†์–ด๋„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • remove() : ์›์†Œ๊ฐ€ ์—†์œผ๋ฉด KeyError๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์•„๋ž˜์ฒ˜๋Ÿผ ์ฐจ์ด๋ฅผ ์ง์ ‘ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

subjects = {"math", "english", "science"}

subjects.discard("history")
print("discard ์ดํ›„:", subjects)

try:
    subjects.remove("history")
except KeyError as e:
    print("remove ์—๋Ÿฌ:", e)

 

์‹คํ–‰ ๊ฒฐ๊ณผ

discard ์ดํ›„: {'math', 'english', 'science'}
remove ์—๋Ÿฌ: 'history'

๋ฐ์ดํ„ฐ ์กด์žฌ ์—ฌ๋ถ€๊ฐ€ ํ™•์‹คํ•˜์ง€ ์•Š์„ ๋•Œ discard()๊ฐ€ ๋” ์•ˆ์ „ํ•˜๊ฒŒ ๋А๊ปด์งˆ ๋•Œ๊ฐ€ ๋งŽ์„ ๊ฒƒ์ด๋‹ค.

 

 

์ง‘ํ•ฉ ์—ฐ์‚ฐ์€ ๋งค์šฐ ์ง๊ด€์ ์ด๋‹ค

set์˜ ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” ์ˆ˜ํ•™์˜ ์ง‘ํ•ฉ ์—ฐ์‚ฐ์„ ์ฝ”๋“œ๋กœ ์•„์ฃผ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค.

team_a = {"Python", "SQL", "Docker", "Linux"}
team_b = {"SQL", "AWS", "Linux", "Terraform"}

print("ํ•ฉ์ง‘ํ•ฉ:", sorted(team_a | team_b))
print("๊ต์ง‘ํ•ฉ:", sorted(team_a & team_b))
print("์ฐจ์ง‘ํ•ฉ:", sorted(team_a - team_b))
print("๋Œ€์นญ ์ฐจ์ง‘ํ•ฉ:", sorted(team_a ^ team_b))

 

์‹คํ–‰ ๊ฒฐ๊ณผ

ํ•ฉ์ง‘ํ•ฉ: ['AWS', 'Docker', 'Linux', 'Python', 'SQL', 'Terraform']
๊ต์ง‘ํ•ฉ: ['Linux', 'SQL']
์ฐจ์ง‘ํ•ฉ: ['Docker', 'Python']
๋Œ€์นญ ์ฐจ์ง‘ํ•ฉ: ['AWS', 'Docker', 'Python', 'Terraform']

 

๊ฐ™์€ ์—ฐ์‚ฐ์€ ๋ฉ”์†Œ๋“œ ํ˜•ํƒœ๋กœ๋„ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

print("ํ•ฉ์ง‘ํ•ฉ:", sorted(team_a.union(team_b)))
print("๊ต์ง‘ํ•ฉ:", sorted(team_a.intersection(team_b)))
print("์ฐจ์ง‘ํ•ฉ:", sorted(team_a.difference(team_b)))
print("๋Œ€์นญ ์ฐจ์ง‘ํ•ฉ:", sorted(team_a.symmetric_difference(team_b)))

 

๋ฒค๋‹ค์ด์–ด๊ทธ๋žจ์œผ๋กœ ๊ทธ๋ ค๋ณด๋ฉด ์ด๋ ‡๋‹ค.

 

 

๊ฐ ์—ฐ์‚ฐ์˜ ์˜๋ฏธ๋ฅผ ์ •๋ฆฌํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ํ•ฉ์ง‘ํ•ฉ: ์–‘์ชฝ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ํฌํ•จ๋œ ์›์†Œ ์ „์ฒด
  • ๊ต์ง‘ํ•ฉ: ์–‘์ชฝ ๋ชจ๋‘์— ํฌํ•จ๋œ ์›์†Œ
  • ์ฐจ์ง‘ํ•ฉ (team_a - team_b): ์™ผ์ชฝ์—๋Š” ์žˆ๊ณ  ์˜ค๋ฅธ์ชฝ์—๋Š” ์—†๋Š” ์›์†Œ
  • ๋Œ€์นญ ์ฐจ์ง‘ํ•ฉ: ํ•œ์ชฝ์—๋งŒ ์กด์žฌํ•˜๋Š” ์›์†Œ

์ด ์—ฐ์‚ฐ๋“ค์€ ๋‹จ์ˆœํ•œ ์˜ˆ์ œ๋ฅผ ๋„˜์–ด ํšŒ์› ๋น„๊ต, ํƒœ๊ทธ ๋ถ„์„, ๊ถŒํ•œ ๊ตฌ์„ฑ, ๊ธฐ์ˆ  ์Šคํƒ ๋น„๊ต์ฒ˜๋Ÿผ ์‹ค์ œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์—์„œ๋„ ๋งค์šฐ ์œ ์šฉํ•˜๋‹ค.

 

 

์—ฐ์‚ฐ์ž์™€ ๋ฉ”์†Œ๋“œ์˜ ์ฐจ์ด

required = {"Python", "SQL", "Git"}
candidate = ["SQL", "Git", "Excel"]

print(required.intersection(candidate))
# print(required & candidate)   # TypeError

 

์‹คํ–‰ ๊ฒฐ๊ณผ

{'SQL', 'Git'}

 

์ถœ๋ ฅ์—์„œ ์™œ ์ด๋Ÿฐ ์ฐจ์ด๊ฐ€ ์ƒ๊ธธ๊นŒ?

intersection() ๊ฐ™์€ '๋ฉ”์†Œ๋“œ ๋ฐฉ์‹'์€ ๋‹ค๋ฅธ iterable๋„ ๋ฐ›์•„์„œ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฐ˜๋ฉด &, |, -, ^ ๊ฐ™์€ '์—ฐ์‚ฐ์ž ๋ฐฉ์‹'์€ ์–‘์ชฝ ๋ชจ๋‘ ์ง‘ํ•ฉ ์ž๋ฃŒํ˜•์ด์–ด์•ผ ํ•œ๋‹ค.

 

๋”ฐ๋ผ์„œ ์—ฐ์‚ฐ์ž ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋จผ์ € set()์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ์–ด์•ผ ํ•œ๋‹ค.

print(required & set(candidate))

 

 

set์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์€ ์ œํ•œ์ด ์žˆ๋‹ค : hashable(ํ•ด์‹œ ๊ฐ€๋Šฅํ•œ ๊ฐ’)

set์˜ ์›์†Œ๋Š” 'hashable(ํ•ด์‹œ ๊ฐ€๋Šฅํ•œ ๊ฐ’)' ์ด์–ด์•ผ ํ•œ๋‹ค.

์‰ฝ๊ฒŒ ๋งํ•ด ๋‚ด๋ถ€์ ์œผ๋กœ ์•ˆ์ •์ ์œผ๋กœ ์‹๋ณ„ ๊ฐ€๋Šฅํ•œ ๊ฐ’์ด์–ด์•ผ ํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค.

๊ทธ๋ž˜์„œ ์ˆซ์ž, ๋ฌธ์ž์—ด, ํŠœํ”Œ ๊ฐ™์€ ๊ฒƒ์ด ์ง‘ํ•ฉ ์›์†Œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

valid_values = {1, 3.14, "data", (10, 20)}
print(valid_values)

 

์‹คํ–‰ ๊ฒฐ๊ณผ

{1, 3.14, 'data', (10, 20)}

 

๋ฐ˜๋ฉด ๋ฆฌ์ŠคํŠธ(List)๋Š” ๊ฐ€๋ณ€ ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ์ง‘ํ•ฉ์˜ ์›์†Œ๊ฐ€ ๋  ์ˆ˜ ์—†๋‹ค.

# invalid_values = {[1, 2], [3, 4]}   # TypeError
TypeError: unhashable type: 'list'

 

์ด ๊ฐœ๋…์€ ์•ž์„œ '5. [ํŒŒ์ด์ฌ] ๋”•์…”๋„ˆ๋ฆฌ'์—์„œ ์‚ดํŽด๋ณด์•˜๋˜ key ์กฐ๊ฑด๊ณผ๋„ ์—ฐ๊ฒฐ๋œ๋‹ค.

์ฆ‰, set์˜ ์›์†Œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์€ dict์˜ key๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ๊ฐ’๊ณผ ๊ฑฐ์˜ ๊ฐ™์€ ๊ธฐ์ค€์œผ๋กœ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

 

 

frozenset์€ ๋ฌด์—‡์ธ๊ฐ€

frozenset์€ ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ '์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋Š” ์ง‘ํ•ฉ'์ด๋‹ค.

์ฆ‰,

  • set์€ ๊ฐ€๋ณ€ ๊ฐ์ฒด(mutable)
  • frozenset์€ ๋ถˆ๋ณ€ ๊ฐ์ฒด(immutable)

๋‹ค์Œ์ฒ˜๋Ÿผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

frozen_topics = frozenset(["python", "sql", "python", "docker"])
print(frozen_topics)

 

์‹คํ–‰ ๊ฒฐ๊ณผ

frozenset({'python', 'sql', 'docker'})

 

ํ•˜์ง€๋งŒ ์ง‘ํ•ฉ ์—ฐ์‚ฐ ์ž์ฒด๋Š” ๊ฐ€๋Šฅํ•˜๋‹ค.

group_x = frozenset(["A", "B", "C"])
group_y = frozenset(["C", "D", "E"])

print(group_x & group_y)
print(group_x | group_y)

 

์‹คํ–‰ ๊ฒฐ๊ณผ

frozenset({'C'})
frozenset({'A', 'B', 'C', 'D', 'E'})

 

 

frozenset์„ ์™œ ์‚ฌ์šฉํ• ๊นŒ

frozenset์€ ๋ถˆ๋ณ€์ด์–ด์•ผ ํ•˜๋Š” ์กฐํ•ฉ์„ ํ‘œํ˜„ํ•  ๋•Œ ๊ฝค ์ค‘์š”ํ•˜๋‹ค.

 

1) ์ง‘ํ•ฉ์„ ๋‹ค๋ฅธ ์ง‘ํ•ฉ์˜ ์›์†Œ๋กœ ๋„ฃ๊ณ  ์‹ถ์„ ๋•Œ

์ผ๋ฐ˜ set์€ mutable์ด๋ผ ๋‹ค๋ฅธ ์ง‘ํ•ฉ์˜ ์›์†Œ๊ฐ€ ๋  ์ˆ˜ ์—†๋‹ค.

ํ•˜์ง€๋งŒ frozenset์€ ๊ฐ€๋Šฅํ•˜๋‹ค.

project_groups = {
    frozenset({"backend", "database"}),
    frozenset({"frontend", "design"})
}
print(project_groups)

 

์‹คํ–‰ ๊ฒฐ๊ณผ

{frozenset({'backend', 'database'}), frozenset({'frontend', 'design'})}

 

2) ๋”•์…”๋„ˆ๋ฆฌ์˜ key๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ

access_levels = {
    frozenset({"read"}): "viewer",
    frozenset({"read", "write"}): "editor",
    frozenset({"read", "write", "delete"}): "admin"
}

print(access_levels[frozenset({"read", "write"})])

 

์‹คํ–‰ ๊ฒฐ๊ณผ

editor

 

 

์‹ค๋ฌด ๊ฐ๊ฐ์œผ๋กœ ์ดํ•ดํ•˜๋Š” set ๊ณผ frozenset

์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ์šฉ์ž ๊ด€์‹ฌ ๊ธฐ์ˆ  ํƒœ๊ทธ๋ฅผ ์ •๋ฆฌํ•œ๋‹ค๊ณ  ํ•ด๋ณด์ž.

interest_tags = ["python", "sql", "python", "streamlit", "docker", "sql"]
unique_tags = set(interest_tags)

print(sorted(unique_tags))

์ด ๊ฒฝ์šฐ์—๋Š” ์ค‘๋ณต ์ œ๊ฑฐ๊ฐ€ ํ•ต์‹ฌ์ด๋ฏ€๋กœ set์ด ์ž˜ ์–ด์šธ๋ฆฐ๋‹ค.

 

๋ฐ˜๋ฉด ๊ถŒํ•œ ์กฐํ•ฉ์ฒ˜๋Ÿผ "์ •ํ•ด์ง„ ๊ทœ์น™"์„ ํ‚ค๋กœ ๋‹ค๋ฃจ๊ณ  ์‹ถ๋‹ค๋ฉด frozenset์ด ๋” ์ ํ•ฉํ•˜๋‹ค.

permission_policy = {
    frozenset({"view"}): "์ฝ๊ธฐ ์ „์šฉ",
    frozenset({"view", "edit"}): "ํŽธ์ง‘ ๊ฐ€๋Šฅ",
    frozenset({"view", "edit", "delete"}): "๊ด€๋ฆฌ ๊ถŒํ•œ"
}

user_permission = frozenset({"view", "edit"})
print(permission_policy[user_permission])

 

์‹คํ–‰ ๊ฒฐ๊ณผ

ํŽธ์ง‘ ๊ฐ€๋Šฅ

 

์ด๋ ‡๊ฒŒ ๋ณด๋ฉด set ๊ณผ frozenset ์€ ๋‹จ์ˆœํžˆ ๋ฌธ๋ฒ• ์ฐจ์ด๊ฐ€ ์•„๋‹ˆ๋ผ, ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์„ฑ๊นŒ์ง€ ๊ณ ๋ คํ•œ ์„ค๊ณ„ ๋„๊ตฌ๋ผ๋Š” ์ ์ด ๋” ๋ถ„๋ช…ํ•ด์ง„๋‹ค.

 

 

๋ถ€๋ถ„์ง‘ํ•ฉ๊ณผ ์ƒ์œ„์ง‘ํ•ฉ

์ง‘ํ•ฉ์—์„œ๋Š” ํ•ฉ์น˜๊ณ  ๋นผ๋Š” ์—ฐ์‚ฐ๋งŒ ์ค‘์š”ํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.

ํฌํ•จ ๊ด€๊ณ„๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ๋„ ์ž์ฃผ ์“ฐ์ธ๋‹ค.

basic_stack = {"Python", "SQL"}
data_stack = {"Python", "SQL", "Airflow", "Docker"}

print(basic_stack.issubset(data_stack))
print(data_stack.issuperset(basic_stack))

 

์‹คํ–‰ ๊ฒฐ๊ณผ

True
True

 

์—ฐ์‚ฐ์ž๋กœ๋„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

print(basic_stack <= data_stack)
print(data_stack >= basic_stack)

 

์˜ˆ๋ฅผ ๋“ค์–ด ํŠน์ • ์ง€์›์ž๊ฐ€ ํ•„์ˆ˜ ๊ธฐ์ˆ ์…‹์„ ๋ชจ๋‘ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€, ์–ด๋–ค ๊ถŒํ•œ์ด ๋‹ค๋ฅธ ๊ถŒํ•œ์˜ ์ƒ์œ„ ๊ฐœ๋…์ธ์ง€ ๋น„๊ตํ•  ๋•Œ ์ด๋Ÿฐ ๋ฐฉ์‹์ด ์œ ์šฉํ•˜๋‹ค.

 

 

set comprehension

๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜์„ ๋ฐฐ์› ๋‹ค๋ฉด, set comprehension๋„ ํ•จ๊ป˜ ์ตํ˜€๋‘๋ฉด ์ข‹๋‹ค.

์ค‘๋ณต ์ œ๊ฑฐ์™€ ๊ณ„์‚ฐ์„ ๋™์‹œ์— ํ•  ์ˆ˜ ์žˆ์–ด์„œ ๋งค์šฐ ๊ฐ„๊ฒฐํ•˜๋‹ค.

scores = [70, 80, 80, 90, 100, 100]
adjusted_scores = {score + 5 for score in scores}

print(adjusted_scores)
print(sorted(adjusted_scores))

 

์‹คํ–‰ ๊ฒฐ๊ณผ

{75, 85, 95, 105}
[75, 85, 95, 105]

 

๋ฐ์ดํ„ฐ ์ •๊ทœํ™”, ๋ฌธ์ž์—ด ์ „์ฒ˜๋ฆฌ, ํŠน์ • ๊ฐ’ ๋ณ€ํ™˜ ํ›„ ์ค‘๋ณต ์ œ๊ฑฐ ๊ฐ™์€ ์ž‘์—…์—๋„ ์‘์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

์‹ค์ˆ˜ํ•˜๊ธฐ ์‰ฌ์šด ํฌ์ธํŠธ

์ฒซ์งธ, ๋นˆ ์ง‘ํ•ฉ์€ {} ๊ฐ€ ์•„๋‹ˆ๋ผ set() ์ด๋‹ค.

empty_dict = {}
empty_set = set()

print(type(empty_dict))
print(type(empty_set))

 

์‹คํ–‰ ๊ฒฐ๊ณผ

<class 'dict'>
<class 'set'>

 

์ฆ‰, {}๋Š” ๋นˆ ์ง‘ํ•ฉ์ด ์•„๋‹ˆ๋ผ '๋นˆ ๋”•์…”๋„ˆ๋ฆฌ'๋‹ค.

 

๋‘˜์งธ, ์ถœ๋ ฅ ์ˆœ์„œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํŒ๋‹จํ•˜๋ฉด ์•ˆ ๋œ๋‹ค

์ง‘ํ•ฉ์€ ์ˆœ์„œ๊ฐ€ ์—†๋Š” ์ž๋ฃŒํ˜•์ด๋ฏ€๋กœ, ์ถœ๋ ฅ ๊ฒฐ๊ณผ์˜ ๋ชจ์–‘์ด ์กฐ๊ธˆ ๋‹ฌ๋ผ๋„ ์ด์ƒํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.

 

์…‹์งธ, ์—ฐ์‚ฐ์ž ๋ฐฉ์‹๊ณผ ๋ฉ”์†Œ๋“œ ๋ฐฉ์‹์˜ ์ž…๋ ฅ ์กฐ๊ฑด์ด ๋‹ค๋ฅด๋‹ค.

intersection()์€ ๋ฆฌ์ŠคํŠธ ๊ฐ™์€ iterable๋„ ๋ฐ›์„ ์ˆ˜ ์žˆ์ง€๋งŒ, & ๋Š” set ๋ผ๋ฆฌ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

๋„ท์งธ, ์›์†Œ๋Š” ํ•ด์‹œ ๊ฐ€๋Šฅํ•œ ๊ฐ’์ด์–ด์•ผ ํ•œ๋‹ค.

๋ฆฌ์ŠคํŠธ, ๋”•์…”๋„ˆ๋ฆฌ, ์ผ๋ฐ˜ set ์€ ์ง‘ํ•ฉ์˜ ์›์†Œ๊ฐ€ ๋  ์ˆ˜ ์—†๋‹ค.

 

๋‹ค์„ฏ์งธ, frozenset์€ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋‹ค.

ํ•˜์ง€๋งŒ ๋ฐ”๋กœ ๊ทธ ๋ถˆ๋ณ€์„ฑ ๋•๋ถ„์— ๋‹ค๋ฅธ ์ง‘ํ•ฉ์˜ ์›์†Œ๋‚˜ ๋”•์…”๋„ˆ๋ฆฌ key๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

๋งˆ๋ฌด๋ฆฌ

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” set์˜ ๊ธฐ๋ณธ ๋ฌธ๋ฒ•์—์„œ ์‹œ์ž‘ํ•ด์„œ ์ง‘ํ•ฉ ์—ฐ์‚ฐ, ๋ฉ”์†Œ๋“œ์™€ ์—ฐ์‚ฐ์ž์˜ ์ฐจ์ด, hashable ๊ฐœ๋…, frozenset์˜ ํ™œ์šฉ๊นŒ์ง€ ์‚ดํŽด๋ณด์•˜๋‹ค.

์ด ํ๋ฆ„์„ ์ž˜ ์ดํ•ดํ•ด๋‘๋ฉด ๋‹ค์Œ์— ๋‹ค๋ฃฐ mutable/immutable, ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ, ๊ฐ์ฒด ์„ค๊ณ„ ๊ฐ™์€ ์ฃผ์ œ๋„ ํ›จ์”ฌ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์—ฐ๊ฒฐํ•ด์„œ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

 

'Python & SQL > Python Basics' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

9. [ํŒŒ์ด์ฌ] iterator์™€ generator  (0) 2026.03.07
7. [ํŒŒ์ด์ฌ] ํ•จ์ˆ˜ ๊ธฐ์ดˆ์™€ ๋งค๊ฐœ๋ณ€์ˆ˜  (0) 2026.03.07
5. [ํŒŒ์ด์ฌ] ๋”•์…”๋„ˆ๋ฆฌ  (0) 2026.03.06
4. [ํŒŒ์ด์ฌ] ํŠœํ”Œ๊ณผ ํŒจํ‚น/์–ธํŒจํ‚น  (0) 2026.03.06
3. [ํŒŒ์ด์ฌ] Python ์ž๋ฃŒํ˜•  (0) 2026.03.06
'Python & SQL/Python Basics' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • 9. [ํŒŒ์ด์ฌ] iterator์™€ generator
  • 7. [ํŒŒ์ด์ฌ] ํ•จ์ˆ˜ ๊ธฐ์ดˆ์™€ ๋งค๊ฐœ๋ณ€์ˆ˜
  • 5. [ํŒŒ์ด์ฌ] ๋”•์…”๋„ˆ๋ฆฌ
  • 4. [ํŒŒ์ด์ฌ] ํŠœํ”Œ๊ณผ ํŒจํ‚น/์–ธํŒจํ‚น
J. Son
J. Son
Petit à petit l'oiseau fait son nid.
  • J. Son
    Steady Study Log
    J. Son
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (172) N
      • Python & SQL (63)
        • Python Basics (21)
        • Python Problems (23)
        • Python Practice (11)
        • MySQL (1)
        • Git & GitHub (7)
      • ML & DL (7) N
      • Projects (6) N
        • Project Portfolio (6) N
      • AI Camp (4)
        • Camp Reflection (4)
      • Concept Notes (6)
        • Statistics & Stata (4)
        • Mathematics (2)
      • Archive (85) N
        • Java (24)
        • R (1)
        • Languages (49)
        • Miscellaneous (11) N
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

    • GitHub
    • WikiDocs
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ์ž๋ฐ”
    ํ”„๋ž‘์Šค์–ด ๊ณต๋ถ€
    ํŒŒ์ด์ฌ
    ๋ถˆ์–ด ๊ด€๊ณ„๋Œ€๋ช…์‚ฌ
    passe compose
    ํŒŒ์ด์ฌ ๋ฌธ์ œ
    Stata
    python streamlit
    ์–ด๋ฆฐ์™•์ž ๋ถˆ์–ด
    machine learning
    ๋ถˆ์–ด ๊ณต๋ถ€
    ํŒŒ์ด์ฌ ํฌ๋กค๋ง
    ๋งฅ git
    ๋ณตํ•ฉ๊ณผ๊ฑฐ
    Le Petit Prince
    ํ”„๋กœ์ ํŠธ ์˜ค์ผ๋Ÿฌ
    share.streamlit.io
    ์ ํ”„ํˆฌํŒŒ์ด์ฌ ์—ฐ์Šต๋ฌธ์ œ
    Github
    MySQL
    streamlit
    python problem
    ์ ํ”„ํˆฌํŒŒ์ด์ฌ ์—ฐ์Šต๋ฌธ์ œ ํ’€์ด
    ํŒŒ์ด์ฌ streamlit
    Python
    ๋จธ์‹ ๋Ÿฌ๋‹
    ๊ฐ์ฒด
    GIT
    ์ดˆ๋ณด์ž๋ฅผ ์œ„ํ•œ ํŒŒ์ด์ฌ 300์ œ
    ์–ด๋ฆฐ์™•์ž ํ”„๋ž‘์Šค์–ด
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.6
J. Son
6. [ํŒŒ์ด์ฌ] set๊ณผ frozenset
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”