๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

[๊ณ ์„ฑ๋ŠฅํŒŒ์ด์ฌ] ์‚ฌ์ „(dictionary) ๊ณผ ์…‹(set)

๋ฐ˜์‘ํ˜•

๐Ÿ”Š ํ•ด๋‹น ํฌ์ŠคํŒ…์€ ๊ณ ์„ฑ๋Šฅ ํŒŒ์ด์ฌ 2ํŒ ์ฑ… ์„œ์ ์„ ์ฝ๊ณ  ๊ฐœ์ธ์ ์ธ ํ•™์Šต ๋ชฉ์  ํ•˜์— ์ž‘์„ฑ๋œ ๊ธ€์ž…๋‹ˆ๋‹ค. ํฌ์ŠคํŒ…์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ž๋ฃŒ๋“ค์€ ์ฑ…์˜ ๋‚ด์šฉ์„ ์ฐธ๊ณ ํ•˜๋˜ ๋ณธ์ธ์ด ์ง์ ‘ ์žฌ๊ตฌ์„ฑํ•œ ์ž๋ฃŒ์ž„์„ ์•Œ๋ฆฝ๋‹ˆ๋‹ค.

 

์ถœ์ฒ˜ : ํ•œ๋น›์ถœํŒ๋„คํŠธ์›Œํฌ


์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ํŒŒ์ด์ฌ์˜ ์ž๋ฃŒ๊ตฌ์กฐ ์ค‘ ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๋ฌธ์ œ์— ์ ํ•ฉํ•œ dictionary(์ดํ•˜ ์‚ฌ์ „)๊ณผ set(์ดํ•˜ ์…‹)์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ๊ณต๋ถ€ํ•ด๋ณด๋ฉด์„œ ์•Œ์•„๋‘๋ฉด ์ข‹์„ ๋‚ด์šฉ๋“ค์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค.

1. ์กฐํšŒ๋„ ํ•œ ๋ฒˆ์—, ์‚ฝ์ž…๋„ ํ•œ ๋ฒˆ์—!

์…‹๊ณผ ์‚ฌ์ „์€ ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ ์œ ํ•˜๊ฒŒ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ„๋„ ๊ฐ์ฒด๊ฐ€ ์žˆ๋Š” ์ƒํ™ฉ์—์„œ ๊ฐ€์žฅ ์ด์ƒ์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ์—ฌ๊ธฐ์„œ '๊ณ ์œ ํ•˜๊ฒŒ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ„๋„ ๊ฐ์ฒด'๋ž€, 'key : value' ๋กœ ์ด๋ฃจ์–ด์ง„ ์ž๋ฃŒ๊ตฌ์กฐ ์ค‘ 'key'์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์ด๋‹ค. ์ด key ๋ผ๋Š” ์ฐธ์กฐํ•˜๋Š” ๊ฐ์ฒด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฌธ์ž์—ด์ด์ง€๋งŒ ํ•ด์‹œ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ฆ‰, hashable ํ•œ ์–ด๋–ค ํƒ€์ž…์ด๋ผ๋„ ์ƒ๊ด€์—†๋‹ค. 

 

ํŒŒ์ด์ฌ์—์„œ ํŠน์ • ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๊ฐ€ hashable ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

import typing

def is_hashable(*args):
    for a in args:
        print(a, type(a), '-> hashable:', isinstance(a, typing.Hashable))
        

int_data = 1000
float_data = 1000.1
string_data = '1000.1'
list_data = [1, 2, 3]
tuple_data = (1, 2, 3)

is_hashable(int_data, float_data, string_data, list_data, tuple_data)

 

์œ„ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด ์•Œ๊ฒ ์ง€๋งŒ ์œ„ ์ฝ”๋“œ์—์„œ ์ •์˜ํ•œ ์ •์ˆ˜, ์‹ค์ˆ˜, ๋ฌธ์ž์—ด, ํŠœํ”Œ์€ ๋ชจ๋‘ hashableํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ด์ง€๋งŒ ๋ฐ์ดํ„ฐ ์ˆ˜์ •์˜ ์—ฌ์ง€๊ฐ€ ์žˆ๋Š” ๋ฆฌ์ŠคํŠธ๋งŒ hashableํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ์•„๋‹ˆ๋‹ค.

 

์‚ฌ์ „๊ณผ ์…‹์˜ ์ฐจ์ด์ ์ด๋ผ๊ณ  ํ•œ๋‹ค๋ฉด ๋ฐ์ดํ„ฐ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’(value)๊ฐ€ ์—†๋‹ค๋Š” ์ ์ด๋‹ค. ์‚ฌ์ „์€ ์žˆ๊ณ , ์…‹์€ ์—†๋‹ค. ๋˜ํ•œ ์…‹์€ ์œ ์ผํ•œ key๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์ง‘ํ•ฉ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. ๋ฌผ๋ก  ์‚ฌ์ „๋„ ๊ธฐ์กด์— ๊ฐ–๊ณ  ์žˆ๋Š” key์™€ ๋™์ผํ•œ key๋ฅผ ๊ฐ–๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์ „ ์ž๋ฃŒ๊ตฌ์กฐ์— ๋„ฃ์œผ๋ฉด ์ดํ›„์— ๋„ฃ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฎ์–ด์“ฐ๊ธฐ ๋œ๋‹ค.

 

์ด์ „ ํฌ์ŠคํŒ…์—์„œ ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋ฆฌ์ŠคํŠธ์™€ ํŠœํ”Œ์€ ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ ์•„๋ฌด๋ฆฌ ๋นจ๋ผ๋„ $O(logn)$ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ๊ฑธ๋ฆฐ๋‹ค๊ณ  ๋ฐฐ์› ๋‹ค. ํ•˜์ง€๋งŒ ์‚ฌ์ „๊ณผ ์…‹์€ ํŠน์ • ๋ฐ์ดํ„ฐ(์—„๋ฐ€ํžˆ ๋งํ•˜๋ฉด ๋ฐ์ดํ„ฐ์˜ index)๋ฅผ ์กฐํšŒํ•  ๋•Œ $O(1)$ ์‹œ๊ฐ„ ๋ณต์žก๋„ ๋ฐ–์— ๊ฑธ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค. ๋˜ํ•œ ๋ฐ์ดํ„ฐ ์‚ฝ์ž…์˜ ๊ฒฝ์šฐ ์‚ฌ์ „๊ณผ ์…‹์€ ๋ฆฌ์ŠคํŠธ, ํŠœํ”Œ ๋•Œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ $O(1)$ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ๊ฑธ๋ฆฐ๋‹ค.

 

์ด๋ ‡๊ฒŒ๋งŒ ๋ณด๋ฉด ์‚ฌ์ „๊ณผ ์…‹์ด ์žฅ์ ๋งŒ ์žˆ์„ ๊ฒƒ ๊ฐ™์ง€๋งŒ, ์‚ฌ์ „๊ณผ ์…‹์€ ์ƒ๋Œ€์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐฉ๊ธˆ ์‚ฌ์ „๊ณผ ์…‹์ด ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ/์‚ฝ์ž…ํ•  ๊ฒฝ์šฐ ๋ชจ๋‘ ์‹œ๊ฐ„๋ณต์žก๋„ $O(1)$์ด ๊ฑธ๋ฆฐ๋‹ค๊ณ  ํ–ˆ์ง€๋งŒ, ์—„๋ฐ€ํžˆ ๋งํ•ด์„œ ์ด ์†๋„๋Š” ์‚ฌ์ „๊ณผ ์…‹์ด ์‚ฌ์šฉํ•˜๋Š” ํ•ด์‹œ ํ•จ์ˆ˜์— ์ „์ ์œผ๋กœ ์˜์กดํ•˜๊ฒŒ ๋œ๋‹ค. ๋งŒ์•ฝ ๋Š๋ฆฐ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์ „๊ณผ ์…‹์ด๋ผ๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ/์‚ฝ์ž…ํ•  ๋•Œ ์‹œ๊ฐ„ ๋ณต์žก๋„ $O(1)$์„ ๋ณด์žฅํ•˜์ง€ ๋ชปํ•œ๋‹ค.

 

์ด์ œ ์ด ํ•ด์‹œ ํ•จ์ˆ˜๊ฐ€ ์‚ฌ์ „๊ณผ ์…‹์ด๋ž‘ ๋ฌด์Šจ ์ƒ๊ด€์ด ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž.

2. ์‚ฌ์ „๊ณผ ์…‹์˜ ๋™์ž‘ ์›๋ฆฌ: ํ•ด์‹œํ•จ์ˆ˜

์‚ฌ์ „๊ณผ ์…‹์€ ํ•ด์‹œ ํ…Œ์ด๋ธ”์ด๋ผ๋Š” ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ, ์‚ฝ์ž…ํ•˜๋Š” ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ๋ชจ๋‘ $O(1)$์ด๋‹ค. ์ด ํ•ด์‹œ ํ…Œ์ด๋ธ”์ด๋ž€ ๋ฌด์—‡์ผ๊นŒ? ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ์ดํ•ดํ•˜๊ธฐ์— ์•ž์„œ ํ•ด์‹œ ํ•จ์ˆ˜๋ผ๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์•Œ์•„์•ผ ํ•œ๋‹ค. ์ตœ๊ทผ์— ๋œจ๊ฑฐ์šด ๊ฐ์ž์˜€๋˜ ๋น„ํŠธ์ฝ”์ธ, ๋ธ”๋ก์ฒด์ธ ๋ถ„์•ผ์— ๋Œ€ํ•ด ์กฐ๊ธˆ์ด๋ผ๋„ ๊ด€์‹ฌ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์€ ํ•ด์‹œ ํ•จ์ˆ˜์— ๋Œ€ํ•ด ๋“ค์–ด๋ณธ ์ ์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค. ํ•ด์‹œ ํ•จ์ˆ˜๋Š” ๊ฐ„๋‹จํ•˜๋‹ค. ์ž…๋ ฅ์„ ๋„ฃ์œผ๋กœ ์ถœ๋ ฅ์„ ๋‚ด๋ฑ‰๋Š” ๊ฐ„๋‹จํ•œ ํ•จ์ˆ˜์ด๋‹ค.

 

ํ•ด์‰ฌ ํ•จ์ˆ˜๋Š” ๊ฒฐ์ •๋ก ์ ์ด๋‹ค

 

๊ทธ๋Ÿฌ๋ฉด ์‚ฌ์ „๊ณผ ์…‹์—์„œ์˜ ํ•ด์‰ฌ ํ•จ์ˆ˜๋Š” ์–ด๋–ค ๊ฒƒ์„ ์ž…,์ถœ๋ ฅ์œผ๋กœ ๋ฐ›๋Š” ๊ฑธ๊นŒ? ์ž…๋ ฅ์€ ์ž„์˜์˜ key์ด๊ณ , ์ถœ๋ ฅ์€ ๋ฆฌ์ŠคํŠธ์˜ index(์ƒ‰์ธ)์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

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

 

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

 

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉํ•  ๋•Œ, ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์ปค์Šคํ…€ํ•˜๊ฒŒ ์กฐ์ž‘ํ•˜๋Š” ์‚ฌ๋ก€์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. ๋จผ์ € ์ด ์‚ฌ๋ก€๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์— ๋Œ€ํ•ด ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด์ž. ๋งŒ์•ฝ ์•„๋ž˜์™€ ๊ฐ™์€ ์‚ฌ์šฉ์ž ์ •์˜ ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.

 

class Point(object):
    def __init__(self, x, y):
        self.x, self.y = x, y

 

์œ„ ํด๋ž˜์Šค์— ๋Œ€ํ•ด์„œ 2๊ฐœ์˜ ๊ฐ์ฒด๋ฅผ ์•„๋ž˜์ฒ˜๋Ÿผ ์ƒ์„ฑํ•ด๋ณด์ž.

 

p1 = Point(1, 1)
p2 = Point(1, 1)

 

๊ทธ๋Ÿฐ๋ฐ ์œ„์ฒ˜๋Ÿผ ์ƒ์„ฑํ•œ ๋ณ€์ˆ˜ p1 ๊ณผ p2๋Š” ๋™์ผํ•œ ๊ฐ์ฒด์ผ๊นŒ? ์—ฌ๊ธฐ์„œ ๋™์ผํ•˜๋‹ค๊ณ  ํ•˜๋Š” ๊ฒƒ์€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊นŒ์ง€ ๋™์ผํ•œ ๊ฐ์ฒด์ธ์ง€๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๋™์ผํ•œ ๊ฐ์ฒด์ธ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์œ„ ๋ณ€์ˆ˜๋“ค์€ ์…‹ ์ž๋ฃŒ๊ตฌ์กฐ์— ๋„ฃ์–ด๋ณด๋ฉด ์•Œ๊ฒŒ๋  ๊ฒƒ์ด๋‹ค.

 

p1 = Point(1, 1)
p2 = Point(1, 1)

temp = set([p1, p2])
print(temp) # {<__main__.Point object at 0x105d5e560>, <__main__.Point object at 0x10636eb60>}

 

์ถœ๋ ฅ์„ ๋ณด๋ฉด p1์€ '0x105d5e560' ๋ผ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ p2๋Š” '0x10636eb60' ๋ผ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๊ฐ–๊ณ  ์žˆ๊ณ , ์ด์— ๋”ฐ๋ผ ์…‹ ์ž๋ฃŒ๊ตฌ์กฐ์— ๋‹ด๋”๋ผ๋„ 2๊ฐœ๊ฐ€ ๋“ค์–ด์žˆ์Œ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ์— ์ด 2๊ฐœ์˜ ๊ฐ์ฒด๊ฐ€ ์„œ๋กœ ๋™์ผํ•˜๋‹ค๊ณ  ๊ฐ„์ฃผํ•˜๋„๋ก ํ•ด์ฃผ๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?

 

์ด๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์šฐ๋ฆฌ๋Š” ๋‘ ๊ฐœ์˜ ๊ฐ์ฒด๊ฐ€ ์„œ๋กœ ๋™์ผํ•˜๋‹ค๋ผ๋Š” ๊ฒƒ์„ ๊ฒ€์ฆํ•˜๋Š” ์กฐ๊ฑด์„ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ์•„๋‹Œ ์‹ค์ œ ๋‚ด์šฉ(๋ฐ์ดํ„ฐ)์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ ์ž‘์„ฑํ•œ๋‹ค๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ํ•จ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ์‚ฌ์šฉ์ž ์ •์˜ ํด๋ž˜์Šค์—๋„ ๊ธฐ๋ณธ ํ•ด์‹œ ํ•จ์ˆ˜์™€ ๋น„๊ต ํ•จ์ˆ˜๊ฐ€ ์กด์žฌํ•˜๋Š”๋ฐ, ๊ธฐ๋ณธ ํ•ด์‹œ ํ•จ์ˆ˜์ธ __hash__ ๋ผ๋Š” ๋งค์ง ๋ฉ”์„œ๋“œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋‚ด์žฅ ๋ฉ”์†Œ๋“œ์ธ id()๋ฅผ ์ด์šฉํ•ด์„œ ํŠน์ • ๊ฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋น„๊ต ํ•จ์ˆ˜์ธ __eq__ ๋งค์ง ๋ฉ”์„œ๋“œ๋Š” ๊ฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜ ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ์„œ๋กœ ์‚ฐ์ˆ  ๋น„๊ตํ•œ๋‹ค.(์ฐธ๊ณ ๋กœ Python2.x ๋ฒ„์ „๋Œ€์—์„œ๋Š” __cmp__ ๋งค์ง ๋ฉ”์„œ๋“œ๊ฐ€ ์‚ฌ์šฉ๋˜์—ˆ์ง€๋งŒ Python3.x ๋ฒ„์ „๋Œ€๋กœ ์˜ค๋ฉด์„œ deprecated ๋˜์—ˆ๋‹ค)

 

๋”ฐ๋ผ์„œ __hash__, __eq__ ๋งค์ง ๋ฉ”์„œ๋“œ ์ด 2๊ฐœ๋ฅผ ์•„๋ž˜์ฒ˜๋Ÿผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•ด๋ณด์ž.

 

class Point(object):
    def __init__(self, x, y):
        self.x, self.y = x, y

    def __hash__(self):
        return hash((self.x, self.y))

    def __eq__(self, other: Point):
        return self.x == other.x and self.y == other.y

 

๋จผ์ € ํ•ด์‹œ ํ•จ์ˆ˜์—์„œ return ํ•˜๋Š” ๊ฐ’์„ ๊ฐ์ฒด์˜ ๋ฐ์ดํ„ฐ x, y๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด ํ•ด์‹œ ํ•จ์ˆ˜์— ๋„ฃ์–ด์ฃผ๋„๋ก ํ•˜์ž. ์ด๋Š” Point ๋ผ๋Š” ๊ฐ์ฒด๋ฅผ hashableํ•œ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚œ ๋’ค ๋‘ ๊ฐœ์˜ ๊ฐ์ฒด๊ฐ€ ๋™์ผํ•œ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ๋น„๊ต ์—ฐ์‚ฐ์ž์ธ __eq__ ๋งค์ง ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•˜์ค€๋‹ค. ํ•ด๋‹น ๋ฉ”์„œ๋“œ๊ฐ€ ๊ตฌํ˜„๋œ ๋กœ์ง์„ ๋ณด๋ฉด ๊ฐ์ฒด์˜ ์†์„ฑ ๊ฐ’์ธ x, y๊ฐ€ ๋ชจ๋‘ ๋™์ผํ•˜๋ฉด ๋™์ผํ•˜๋‹ค๊ณ  ๊ฐ„์ฃผํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ ๊ตฌํ˜„๋œ Point ๊ฐ์ฒด๋ฅผ ์ƒˆ๋กญ๊ฒŒ 2๊ฐœ ์ƒ์„ฑํ•˜๊ณ , ์…‹ ์ž๋ฃŒ ๊ตฌ์กฐ์— ๋‹ด์•„๋ณด์ž.

 

p1 = Point(1, 1)
p2 = Point(1, 1)

temp = set([p1, p2])
print(temp) # {<__main__.Point object at 0x10636f250>}

 

๊ทธ๋Ÿฌ๋ฉด ์ด์ œ 2๊ฐœ์˜ ๊ฐ์ฒด๊ฐ€ ๋™์ผํ•˜๋‹ค๋Š” ๊ฒƒ์ด ๊ฐ„์ฃผ๋˜์–ด ์…‹ ์ž๋ฃŒ๊ตฌ์กฐ์—๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ€ '0x10636f250'์ธ ๊ฐ์ฒด ํ•˜๋‚˜ ๋ฐ–์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์ƒˆ๋กญ๊ฒŒ ์ •์˜ํ•˜๋Š” ๊ฒƒ์€ ์ƒˆ๋กญ๊ฒŒ ์ •์˜ํ•œ ํ•ด์‹œ ํ•จ์ˆ˜์˜ ์—”ํŠธ๋กœํ”ผ๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ์—”ํŠธ๋กœํ”ผ๋ž€, ํ•ด์‹œ ํ•จ์ˆ˜๊ฐ€ ์–ผ๋งˆ๋‚˜ ๊ท ์ผํ•œ ๋ถ„ํฌ๋กœ ํ•ด์‹œ๊ฐ’์„ ๋งŒ๋“ค์–ด๋‚ด๋Š”์ง€๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ํ•ด์‹œ ํ•จ์ˆ˜๊ฐ€ ์–ผ๋งˆ๋‚˜ ๊ท ์ผํ•œ ๋ถ„ํฌ๋กœ list์˜ index๋ฅผ ์ƒ์„ฑํ•˜๋Š”์ง€๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ด ์—”ํŠธ๋กœํ”ผ๊ฐ€ ์ตœ๋Œ€์ธ ๊ฒƒ์€ ํ•ด์‹œ๊ฐ’์ด ๊ท ์ผํ•œ ๋ถ„ํฌ์ด๋ฉฐ ์ด๋Š” ๊ณง ํ•ด์‹œ ํ•จ์ˆ˜๊ฐ€ ์ตœ์†Œ ์ถฉ๋Œ์„ ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ ์™„์ „ ํ•ด์‹œํ•จ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ํ•ด์‹œ ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„๋œ ์‚ฌ์ „๊ณผ ์…‹ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๋งค์šฐ ์ข‹์€ ์„ฑ๋Šฅ์„ ๋ณด์ธ๋‹ค.

3. ์‚ฌ์ „(dictionary) ํƒ์ƒ‰์ด ์ด๋ฃจ์–ด์ง€๋Š” ๊ณณ: ๋„ค์ž„์ŠคํŽ˜์ด์Šค

์ง€๊ธˆ๊นŒ์ง€ ๋ฐฐ์šด ๊ฒƒ์ฒ˜๋Ÿผ ์‚ฌ์ „์€ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ(ํƒ์ƒ‰)ํ•  ๋•Œ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ๋งค์šฐ ๋น ๋ฅธ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์•„๋ฌด๋ฆฌ ๋น ๋ฅด๋‹ค๊ณ  ํ•ด๋„ ๋ถˆํ•„์š”ํ•œ ํƒ์ƒ‰์€ ์ฝ”๋“œ ์‹คํ–‰ ์†๋„๋ฅผ ๋–จ์–ด๋œจ๋ฆฌ๋Š” ์›์ธ์ด ๋œ๋‹ค. ์ด๋Ÿฌํ•œ ๊ณผ๋„ํ•œ ์‚ฌ์ „ ํƒ์ƒ‰์œผ๋กœ ์ธํ•ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์ด ๋ฐ”๋กœ ํŒŒ์ด์ฌ์˜ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค ๊ด€๋ฆฌ์ด๋‹ค.

 

๋จผ์ € ํŒŒ์ด์ฌ์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋Œ€ํ•ด์„œ ์•Œ์•„์•ผ ํ•œ๋‹ค. ํŒŒ์ด์ฌ์—์„œ๋Š” ๋ณ€์ˆ˜, ํ•จ์ˆ˜, ๋ชจ๋“ˆ์ด ์‚ฌ์šฉ๋  ๋•Œ ๊ทธ ๊ฐ์ฒด๋ฅผ ์–ด๋””์„œ ์ฐพ์•„ ๋ถˆ๋Ÿฌ์˜ฌ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ณ„์ธต์ด ์žˆ๋‹ค. ์ด๋ฅผ ๋ฐ”๋กœ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ผ๊ณ  ํ•œ๋‹ค. ํŒŒ์ด์ฌ์€ ํฌ๊ฒŒ ์•„๋ž˜์™€ ๊ฐ™์€ ์ˆœ์„œ๋กœ ๊ฐ์ฒด๋ฅผ ์ฐพ๊ฒŒ ๋œ๋‹ค.

 

ํŒŒ์ด์ฌ์ด ๋ณ€์ˆ˜, ํ•จ์ˆ˜, ๋ชจ๋“ˆ์„ ์ฐพ๊ธฐ ์œ„ํ•ด ํƒ์ƒ‰ํ•˜๋Š” ๊ณต๊ฐ„์˜ ์ˆœ์„œ

 

ํŒŒ์ด์ฌ์€ ๊ฐ€์žฅ ๋จผ์ € ๋ชจ๋“  ์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ๋‹ด์€ ์ง€์—ญ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ locals() ๋ผ๋Š” ๋ฐฐ์—ด์—์„œ ์ฐพ๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ๋Š” ์œ ์ผํ•˜๊ฒŒ ์‚ฌ์ „ ํƒ์ƒ‰์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š” ๋ถ€๋ถ„์ด๋‹ค. ์ด locals() ๋ฐฐ์—ด์€ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ ํ•  ๋•Œ ๋งŒ๋“ค์–ด์ง€๋Š” ์Šคํƒ ํ”„๋ ˆ์ž„์ด๋ผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ์•ˆ์˜ ์ง€์—ญ ๋ณ€์ˆ˜ ์˜์—ญ์„ ์˜๋ฏธํ•œ๋‹ค. ํ•จ์ˆ˜๋Š” ์ž์‹ ์˜ ์ง€์—ญ ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•  ๋•Œ๋Š” ์Šคํƒ ํ”„๋ ˆ์ž„ ๋‚ด์˜ ์ง€์—ญ ๋ณ€์ˆ˜ ์˜์—ญ์— ์–ด๋–ค ๋ฐ์ดํ„ฐ๊ฐ€ ๋ช‡ ๋ฒˆ์งธ์— ์žˆ๋Š”์ง€ index ๊ฐ’์„ ๋ฏธ๋ฆฌ ์•Œ๊ณ  ์žˆ๋Š” ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์ „ ํƒ์ƒ‰์„ ํ•˜์ง€ ์•Š๊ณ ๋„ ๊ณง๋ฐ”๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋‹ค์Œ์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” ๊ณณ์€ ์ „์—ญ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ globals() ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ์ด ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์‚ฌ์ „์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์ „ ํƒ์ƒ‰์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

๊ทธ๋ž˜๋„ ์—†๋‹ค๋ฉด ๋งˆ์ง€๋ง‰์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” ๊ณณ์€ __builtin__ ๋ผ๋Š” ๋ชจ๋“ˆ ๊ฐ์ฒด์—์„œ ์ฐพ๋Š”๋‹ค. __builtin__ ์€ ๋ชจ๋“ˆ ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ๋ชจ๋“ˆ ๋‚ด๋ถ€์˜ locals() ์‚ฌ์ „ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค. ์ฐธ๊ณ ๋กœ ๊ฐ€์žฅ ์ฒซ๋ฒˆ์งธ๋กœ ํƒ์ƒ‰ํ•˜๋Š” ์ง€์—ญ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋‚ด์˜ locals() ๋•Œ๋Š” ๋‹จ์ˆœํžˆ index๋กœ ์ ‘๊ทผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ๋นจ๋ž์ง€๋งŒ, __builtin__ ๋ชจ๋“ˆ ๊ฐ์ฒด์˜ locals() ์—์„œ๋Š” ์‚ฌ์ „์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฆ„์œผ๋กœ ํƒ์ƒ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋Œ€์ ์œผ๋กœ ์†๋„๊ฐ€ ๋Š๋ฆฌ๋‹ค.

 

์œ„์ฒ˜๋Ÿผ ํƒ์ƒ‰ ์ˆœ์„œ์™€ ๊ฐ ๋‹จ๊ณ„์—์„œ์˜ ํŠน์ง•์„ ๋จธ๋ฆฟ์†์— ๋‘๊ณ  ํŠน์ • ํ•จ์ˆ˜ ๋˜๋Š” ๋ชจ๋“ˆ์„ ์ž„ํฌํŠธํ•˜๋Š” ์•„๋ž˜ ์˜ˆ์‹œ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด์„œ ์–ด๋–ป๊ฒŒ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๊ฐ€ ๊ฐ€์žฅ ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ๋ณด์žฅํ•˜๋Š”์ง€ ๋น„๊ตํ•ด๋ณด๋„๋ก ํ•˜์ž.

 

import math

def test1(x):
    res = 1
    for _ in range(1000):
        res += math.sin(x)
    return res

 

์ด ๋ฐฉ๋ฒ•์—์„œ๋Š” ์‚ฌ์ „ ํƒ์ƒ‰์„ 2๋ฒˆ ์ง„ํ–‰ํ•œ ์ฝ”๋“œ์ด๋‹ค. ๊ฐ€์žฅ ๋จผ์ € math ๋ผ๋Š” ๋ชจ๋“ˆ์„ ๋กœ๋“œํ•  ๋•Œ 1๋ฒˆ, ๊ทธ๋ฆฌ๊ณ  math ๋ผ๋Š” ๋ชจ๋“ˆ ์•ˆ์—์„œ sin ํ•จ์ˆ˜๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด 1๋ฒˆ ์ด 2๋ฒˆ์„ ์ง„ํ–‰ํ•œ๋‹ค.

 

๋‹ค๋ฅธ ์Šคํƒ€์ผ์˜ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž.

 

from math import sin

def test2(x):
    res = 1
    for _ in range(1000):
        res += sin(x)
    return res

 

์ด๋ฒˆ์—” ๋ช…์‹œ์ ์œผ๋กœ sin ํ•จ์ˆ˜๋ฅผ ์ž„ํฌํŠธ ํ–ˆ๋‹ค. ์ด๋Ÿด ๊ฒฝ์šฐ, sin ์ด๋ผ๋Š” ํ•จ์ˆ˜๋Š” ์ „์—ญ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค. ๋ฐ”๋กœ ์ง์ „์˜ ์ฝ”๋“œ๋ณด๋‹ค ์‚ฌ์ „ ํƒ์ƒ‰์„ ํ•œ ๋ฒˆ ์Šคํ‚ตํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ์Šคํƒ€์ผ์˜ ์ฝ”๋“œ๋Š” ์†๋„๋ฅผ ๋น ๋ฅด๊ฒŒ ํ•ด์ค„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ•จ์ˆ˜๋ฅผ ๋ช…์‹œํ•˜์—ฌ ์–ด๋–ค ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•œ์ง€ ์ „๋‹ฌํ•˜๊ฒŒ ๋˜์–ด ์ฝ”๋“œ ๊ฐ€๋…์„ฑ๋„ ๋†’ํž ์ˆ˜ ์žˆ๋‹ค. ๋ฌผ๋ก  ์ด ์ฝ”๋“œ๋„ ์•„์ง๊นŒ์ง€๋Š” ์ „์—ญ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ sin ์ด๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ์‚ฌ์ „ ํƒ์ƒ‰์„ ํ•œ ๋ฒˆ์€ ์ง„ํ–‰ํ•ด์•ผ ํ•œ๋‹ค.

 

๋งˆ์ง€๋ง‰์œผ๋กœ ์•„๋ž˜ ์Šคํƒ€์ผ์˜ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž.

 

import math

def test3(x, func=math.sin):
    res = 1
    for _ in range(1000):
        res += func(x)
    return res

 

์ด๋ฒˆ์—๋Š” math ๋ชจ๋“ˆ์„ ์ž„ํฌํŠธํ•˜๊ธด ํ–ˆ์ง€๋งŒ test3 ์ด๋ผ๋Š” ํ•จ์ˆ˜์˜ func ์ด๋ผ๋Š” argument์— ๊ธฐ๋ณธ๊ฐ’์„ math ๋ชจ๋“ˆ์˜ sin ํ•จ์ˆ˜๋ฅผ ์ง€์ •ํ–ˆ๋‹ค. ์ด ๊ฒฝ์šฐ๋„ math ๋ชจ๋“ˆ ์•ˆ์—์„œ sin ํ•จ์ˆ˜๋ฅผ ์ฐพ๋Š” ์‚ฌ์ „ ํƒ์ƒ‰์ด ํ•œ ๋ฒˆ ์ง„ํ–‰๋˜์ง€๋งŒ, test3๊ฐ€ ์ตœ์ดˆ๋กœ ํ˜ธ์ถœ ๋  ๋•Œ๋งŒ ์ฐพ๋Š”๋‹ค. ์™œ๋ƒํ•˜๋ฉด test3 ์ด๋ผ๋Š” ํ•จ์ˆ˜๊ฐ€ ์ •์˜๋˜๊ณ  ๋‚˜๋ฉด sin ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ฐธ์กฐ๋Š” ํ•จ์ˆ˜ ์ •์˜ ์‹œ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ง€์ •๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ง€์—ญ ๋ณ€์ˆ˜์— ์ €์žฅ๋˜๊ณ  ์ด๋Š” ๊ฐ€์žฅ ๋น ๋ฅด๊ณ  ๊ฐ€์žฅ ๋จผ์ € ํƒ์ƒ‰ํ•˜๋Š” ์ง€์—ญ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ locals() ๋ฐฐ์—ด์—์„œ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํ•ด๋‹น ๋ถ€๋ถ„์œผ๋กœ ์ธํ•ด ์ง์ „ ์ฝ”๋“œ๋ณด๋‹ค๋Š” ์ข€ ๋” ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•œ๋‹ค.

 

๊ทธ๋Ÿฐ๋ฐ ์—ฌ๊ธฐ์„œ ์•Œ์•„๋‘์–ด์•ผ ํ•  ์ ์€ test3 ํ•จ์ˆ˜๊ฐ€ ์ •์˜๋œ ์Šคํƒ€์ผ์˜ ์ฝ”๋“œ๋Š” ์‚ฌ์‹ค pythonicํ•œ ์ฝ”๋“œ๋Š” ์•„๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ด๋ ‡๊ฒŒ ์ถ”๊ฐ€ ์‚ฌ์ „ ํƒ์ƒ‰์„ ์Šคํ‚ตํ•˜๋„๋ก ๊ฐœ์„ ํ•จ์œผ๋กœ์จ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ๋ง‰์„ ์ˆ˜ ์žˆ๊ธด ํ•˜์ง€๋งŒ ๋ณดํ†ต ํŠน์ • ํ•จ์ˆ˜๋ฅผ ์—„์ฒญ๋‚˜๊ฒŒ ๋งŽ์ด ํ˜ธ์ถœํ•  ๋•Œ์—๋‚˜ ์ถ”๊ฐ€ ์‚ฌ์ „ ํƒ์ƒ‰์œผ๋กœ ์ธํ•œ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ํ•ด๋‹น ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ๋งŽ์ด ํ•˜์ง€ ์•Š๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด pythonic ํ•œ ์ฝ”๋“œ๋ฅผ ์œ ์ง€ํ•˜ test2 ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•œ ์Šคํƒ€์ผ์˜ ์ฝ”๋“œ๊ฐ€ ๋” ์ ์ ˆํ•  ์ˆ˜ ์žˆ๋‹ค.


์ด๋ ‡๊ฒŒ ํ•ด์„œ ํŒŒ์ด์ฌ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์ธ ์‚ฌ์ „๊ณผ ์…‹, ๊ทธ๋ฆฌ๊ณ  ๋” ๋‚˜์•„๊ฐ€ ์‚ฌ์ „ ํƒ์ƒ‰์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํŒŒ์ด์ฌ์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋Œ€ํ•ด์„œ๋„ ์ถ”๊ฐ€๋กœ ์•Œ์•„๋ณด์•˜๋‹ค. ๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ์ €์žฅํ•˜์ง€ ์•Š๊ณ ๋„ ๋ฐ์ดํ„ฐ ์ˆœ์„œ๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ์ œ๋„ค๋ ˆ์ดํ„ฐ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

๋ฐ˜์‘ํ˜•