๐โโ๏ธ ๊ฐ์
ํ๋ก๊ทธ๋๋ฐ ๊ณต๋ถ๋ฅผ ํ๋ ์ฌ๋๋ค์ด๋ฉด ์์ ๋ณต์ฌ, ๊น์ ๋ณต์ฌ์ ๋ํด ๋ค์ ์ ์ด ์์ ๊ฒ์ด๋ค. ๋๋ ๊ทธ๋ฌ์๊ณ ์์ ๋ณต์ฌ๋ ์ฃผ์ ๊ฐ์ ๋ณต์ฌํ์ฌ ํ๋๊ฐ ๋ณ๊ฒฝ๋๋ฉด ๊ฐ์ด ๋ณ๊ฒฝ๋๋ ๊ฒ์ผ๋ก ๋๊ฐ ์๊ณ ์์๋ค. ์ด๊ฒ์ด ์ค์ํ๋ค๊ณ ํ๋ ๊ฒ์ ๋ง์ด ๋ดค์๋๋ฐ, ๋๋ ์ญ์ ์ง์ ๊ฒช๊ธฐ ์ ๊น์ง ๋ชจ๋ฅด๋ ๊ฒ ๊ฐ๋ค. ๊ทธ๋์์ธ์ง ์ ๋ฌด ์ค์ ๊ธฐ์ด์ฝ ์ผ์ ๋ด๊ณ ๋ง์๋ค.
๐จ ์ํฉ
์ด๋ค ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋๋ฐ ํ์์๋ ํค์๋๋ฅผ ๊ฑธ๋ฌ์ฃผ๊ธฐ ์ํด filter keyword ๋ชจ๋์ ๋ง๋ค์ด์ ํค์๋ ํํฐ๋ง์ ํ๊ณ ์์๋ค. ๋จ์ํ ๊ฒ์ ๋จ์ด์ ๋ฐ๋ผ ๋ฑ๋กํด๋ ํํฐ๋งํ ํค์๋๋ฅผ ๊ฐ์ ธ์์ ๊ณตํต ํํฐ๋งํ ํค์๋์ ํฉ์ณ์ ํค์๋๋ฅผ ๊ฑธ๋ฌ์ฃผ๋ ๋ก์ง์ด์๋ค. ํ์ง๋ง ์ฒ์์ ๊ฒ์ ํค์๋์ ํํฐ๋ง ํค์๋๊ฐ ์ง์์ ธ์ ์ ์์ ์ผ๋ก ์๋ํ๋๋ฐ, ๊ฐ๋ฉด ๊ฐ์๋ก ๊ฒ์ ํค์๋์ ์๊ด์์ด ๋ฑ๋กํด๋๋ ๋ชจ๋ ํค์๋๋ก ํํฐ๋ง์ด ๋๋ ๊ฒ์ด๋ค. ์ฝ๋๋ก ๋ณด๋ฉด ๋ ์ดํด๊ฐ ๋น ๋ฅด๋ค.
FILTER_KEYWORD = {
'๊ณตํต' : {'ใ
', 'ใ
', '.', '?'},
'์ปคํผ' : {'์คํ๋ฒ
์ค', 'ํ ๋ฆฌ์ค', '์ปคํผ๋น'},
}
def get_filter_keywords(search_key: Optional[str] = None) -> Set:
filter_keywords = FILTER_KEYWORD['๊ณตํต'] # {'ใ
', 'ใ
', '.', '?'}
if search_key:
specific_filter_keywords = FILTER_KEYWORD[search_key] # {'์คํ๋ฒ
์ค', 'ํ ๋ฆฌ์ค', '์ปคํผ๋น'}
filter_keywords |= specific_filter_keywords # ํฉ์งํฉ ์ทจํด์ค.
return filter_keywords
if __name__ == "__main__":
print(FILTER_KEYWORD['๊ณตํต']) # {'ใ
', 'ใ
', '.', '?'}
get_filter_keywords('์ปคํผ')
print(FILTER_KEYWORD['๊ณตํต']) # {'ใ
', 'ใ
', '.', '?', '์คํ๋ฒ
์ค', 'ํ ๋ฆฌ์ค', '์ปคํผ๋น'}
FILTER_KEYWORD๋ฅผ ์ ์ญ ๋ณ์๋ก ์ ์ธํ๊ณ , ๋ชจ๋ ๊ฒ์์ด์๋ ์ ์ฉ๋๊ฒ ํ๊ธฐ ์ํด ๊ณตํต ํํฐ ํค์๋๋ฅผ ์ฌ์ ์ ์ถ๊ฐํ๊ณ , ์ฌ์ ์์ ํน์ ๊ฒ์ ๋จ์ด์ ํํฐํค์๋์ ํฉ์ณ์ ๋ฆฌํดํ๋ ํจ์๋ฅผ ๋ง๋ค์๋ค.
๋ฌธ์ ๋ ๋ฆฌํด ๊ฐ์ ๋ณด๋ฉด ์ ์ ์๋ค. set์ mutable ๊ฐ์ฒด๊ธฐ ๋๋ฌธ์, ์ ์์ ์ ์ฒ๋ผ FILTER_KEYWORD์ ๊ณตํต set์ ๋จ์ ๋์ ํ๋ ๊ฒ๊ณผ ๊ฐ์ด ์์ ๋ณต์ฌ๋ก๋ filter_keywords์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด FILTER_KEYWORD์ ๊ณตํต set์ ๊ฐ๋ ๊ฐ์ ๊ฐ์ผ๋ก ์ ๋ฐ์ดํธ ๋์ด๋ฒ๋ฆฌ๋ ๊ฒ์ด๋ค.
์ด ๋ถ๋ถ์ ๋ง์ง๋ง print ๋ถ๋ถ์ ๋ณด๋ฉด ์ฝ๊ฒ ์ดํด๊ฐ ๊ฐ๋ฅํ๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ณํ์ง ์์์ผ ํ FILTER_KEYWORD['๊ณตํต'] ๊ฐ์ด ๋ฐ๋์ด ๋ฒ๋ฆฐ ๊ฒ์ด๋ค.๐ฑ
โ mutable, immutable / ์์๋ณต์ฌ, ๊น์๋ณต์ฌ ๊ด๋ จ ๊ธ : https://wikidocs.net/16038
๐ฎโ๐จ ํด๊ฒฐ๋ฒ
์ด๋ฐ ์์๋ณต์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ ๋ฐฉ๋ฒ์ด ๋ช ๊ฐ์ง ์๋ค.
- copy ๋ชจ๋์ deepcopy ๋ฉ์๋ ์ฌ์ฉ
- mutable ๊ฐ์ฒด์ .copy() ๋ฉ์๋ ์ฌ์ฉ
- list์ ๊ฒฝ์ฐ slicing ์ฌ์ฉ
๋๋ ์ฌ๊ธฐ์ 2๋ฒ์ธ .copy() ๋ฉ์๋๋ฅผ ์ด์ฉํด์ ๋ค์๊ณผ ๊ฐ์ด ํด๊ฒฐํ๋ค.
1๏ธโฃ .copy() method ์ฌ์ฉ
FILTER_KEYWORD = {
'๊ณตํต' : {'ใ
', 'ใ
', '.', '?'},
'์ปคํผ' : {'์คํ๋ฒ
์ค', 'ํ ๋ฆฌ์ค', '์ปคํผ๋น'},
}
def get_filter_keywords(search_key: Optional[str] = None) -> Set:
filter_keywords = FILTER_KEYWORD['๊ณตํต'].copy() # copy method ์ฌ์ฉ
if search_key:
specific_filter_keywords = FILTER_KEYWORD[search_key]
filter_keywords |= specific_filter_keywords
return filter_keywords
if __name__ == "__main__":
print(FILTER_KEYWORD['๊ณตํต']) # {'ใ
', 'ใ
', '.', '?'}
get_filter_keywords('์ปคํผ')
print(FILTER_KEYWORD['๊ณตํต']) # {'ใ
', 'ใ
', '.', '?'}
์ด์ ์๋ํ ๋๋ก ์ ์ญ ๋ณ์์ธ FILTER_KEYWORD์ ๊ฐ์ด ๋ณํ์ง ์๊ฒ ๋์๋ค!
๋ด๊ฐ ์ฒํ ์ํฉ์์๋ ์ด ๋ฐฉ๋ฒ์ผ๋ก ์ถฉ๋ถํ ํด๊ฒฐ์ด ๊ฐ๋ฅํ์ง๋ง, ์ฌ์ค ์ด ๋ฐฉ๋ฒ์ผ๋ก๋ ์๋ฒฝํ๊ฒ ๋ณต์ฌ๋์ง ์์ ๋๊ฐ ์๋ค. ๋ค์ ์์ ๋ฅผ ํตํด ์์๋ณด์
โ mutable ๊ฐ์ฒด ์์ ๋ mutable ๊ฐ์ฒด๊ฐ ์๋ ๊ฒฝ์ฐ
a ๋ผ๋ ์ด์ค ๋ฆฌ์คํธ๋ฅผ b๋ผ๋ ๋ณ์์ ๋ณต์ฌ๋ฅผ ํ๊ณ ์ถ๋ค๊ณ ๊ฐ์ ํ์.
>>> a = [[1,2],[2,3]]
>>> b = a.copy()
>>> print(a, b) # [[1, 2], [2, 3]] [[1, 2], [2, 3]]
>>> print(id(a), id(b)) # 140403959376304 140403959502640
.copy()๋ฅผ ์ฌ์ฉํ์ฌ ๋ณต์ฌ๋ฅผ ํ๋ฉด ์ฃผ์ ๊ฐ์ด ๋ค๋ฅธ ๊ฒ์ ๋ณด์ ์ ๋ณต์ฌ๋ ๊ฒ์ฒ๋ผ ๋ณด์ธ๋ค. ํ์ง๋ง ํญ์ ์ฐ๋ฆฐ ์์ฌ์ ํ๊ณ , ํ ์คํธ๋ฅผ ํด๋ด์ผ์ง ์๊ฒ ๋๊ฐ? ๋ฆฌ์คํธ ์์ ๋ฆฌ์คํธ์ ์์๋ฅผ ๋ฐ๊ฟ๋ณด์.
>>> b[0][0]=2
>>> print(a, b) # [[2, 2], [2, 3]] [[2, 2], [2, 3]]
์๋ ์ด๊ฒ ๋ญ๋? b ๋ฆฌ์คํธ์ ์ฒซ ๋ฒ์งธ ๋ฆฌ์คํธ(b[0]
)์ ์ฒซ ๋ฒ์งธ ๊ฐ(b[0][0]
)์ ๋ฐ๊ฟ๋ณด๋ a ๋ฆฌ์คํธ์ ๊ฐ๋ ๊ฐ์ด ๋ฐ๋์ด๋ฒ๋ ธ๋ค. ๋ฌด์จ ์ผ์ผ๊น? ํน์ ๋ชจ๋ฅด๋ ๋ด๋ถ ๋ฆฌ์คํธ์ ์ฃผ์ ๊ฐ์ ์ฐ์ด๋ณด์.
>>> print(id(a[0]), id(b[0])) # 140403959502480 140403959502480
๋ด๋ถ์ ๋ฆฌ์คํธ๋ค์ ์ฃผ์๊ฐ์ด ์ฌ์ ํ ๊ฐ์ ๊ฒ์ ์ ์ ์๋ค. ์ด ๋ง์ ๋ด๋ถ ๋ฆฌ์คํธ๊น์ง๋ ๋ณต์ฌ(๋ค๋ฅธ ์ฃผ์ ๊ฐ์ผ๋ก ํ ๋น)๊ฐ ๋์ง ์์๋ค๋ ๊ฒ์ด๋ค. ์ ๋ฆฌํ๋ฉด, ๋์ ๋๋ฆฌ๋ ๋ฆฌ์คํธ์ฒ๋ผ ๋ด๋ถ ์์์๋ ๋ list, set, dict๋ฅผ ๊ฐ์ง ์ ์๋ ์๋ฃํ๋ค์ .copy() ํตํด์๋ ํ์์ ๋ฐ์ดํฐ๊น์ง๋ ๋ณต์ฌ๊ฐ ๋์ง ์๋๋ค๋ ๊ฒ์ด๋ค. (list slicing์ ์ด์ฉํ ๊ฒฝ์ฐ์๋ ๋์ผํ๋ค.)
๊ทธ๋ผ ์ด๋ป๊ฒ ํด์ผํ๋..? ๊น์ ๋ณต์ฌ๋ฅผ ์ฌ์ฉํ์!
2๏ธโฃ copy ๋ชจ๋์ deepcopy method ์ฌ์ฉ
>>> import copy
>>> a= [[1,2],[2,3]]
>>> b = copy.deepcopy(a)
>>> print(a,b) # [[1, 2], [2, 3]] [[1, 2], [2, 3]]
>>> b[0][0]=2
>>> print(a,b) # [[1, 2], [2, 3]] [[2, 2], [2, 3]]
>>> print(id(a[0]), id(b[0])) # 140403959502240 140403958979392
deepcopy()๋ฅผ ์ฌ์ฉํ๋ b์ ๊ฐ๋ง ๋ฐ๋ ๊ฒ์ ์ ์ ์๊ณ , ํ์ ๋ฆฌ์คํธ์ ์ฃผ์ ๊ฐ์ ๋น๊ตํด๋ด๋ ๋ฌ๋ผ์ง ๊ฒ์ ๋ณผ ์ ์๋ค. ์ด์ ์ผ ์ ๋๋ก ๊ฐ๋ง ๋ณต์ฌ๋ ๊ฒ์ด๋ค.
์ค๋์ ๊ตํ : ๋ณํ์ง ์์์ผ ํ๋ ๋ณ์๋ ๊ผญ!! immutable ๊ฐ์ฒด(tuple, frozenset ๋ฑ)๋ก ๋ง๋ค์ด์ฃผ์!!
๋ค๋ฅธ ๋ถ๋ค์ ์ ์ฒ๋ผ ์๋ํ์ง ์์ ๊ฒฐ๊ณผ๋ฅผ ์ป๋ ์ผ์ด ์๋๋ก ๋ฐ๋์...๐ข
๐ ๋ง๋ฌด๋ฆฌ
๋๋ ๋์ถฉ์ด๋ผ๋ ์๊ณ ์๋ ๊ฐ๋ ์ ์ค์ ์ํฉ์์ ๋ง๋๋ณด๋ ์ ํ ์ ๊ฒฝ ์ฐ์ง ๋ชปํ๊ณ , ๋์ํ์ง ๋ชปํ๋ค. ์ด๊ฑฐ ๋๋ฌธ์ ๋ด๊ฐ ์๋ ๋ค๋ฅธ ๋ถ๊ป์ ์๋ฌ ์ก์๋ด๋๋ผ ๋ฆ๊ฒ ํด๊ทผํ์ จ๋ค๊ณ ํ๋ค. ๊ทธ๋ฌ๊ณ ์ด๋ฐ ์๋ฌ๊ฐ ์์๋ค๊ณ ๋ง์ํด์ฃผ์ จ์๋ค... ์ง์ง ๋ฃ๋ ์๊ฐ ์์นํ...๐ต ๋ด๊ฐ ์ง ์ฝ๋์์ ๊ฒฐํจ์ด ๋ฐ๊ฒฌ๋ ๋๊ฐ ์ ์ผ ํํ ์จ๋ค. ๋ด๊ฐ ์ด๊ฒ๋ฐ์ ๋ชปํ๋.. ์ด๋ฐ ์๊ฐ์ด ๋ค๋ฉด์ ๐ญ
๊ทธ๋๋ ๋๋ฅผ ์๊ฐํด์ ๋งํ์ง๋ง๊น ํ์๋ค๊ฐ ์์งํ ํผ๋๋ฐฑ์ ์ฃผ์ ๊ฒ์ ๊ฐ์ฌํ๋ค. ๋๋ถ์ ๋ด๊ฐ ์ ๋๋ก ์๊ณ ๋ค์๋ถํฐ ๋์ฑ ์ ๊ฒฝ ์จ์ ์ฝ๋๋ฅผ ์ง์ง ์์๊น ์ถ๋ค. ๊ทธ๋๋ ์์ผ๋ก ์ด๋ฐ ์ผ์ด ์๊ธฐ์ง ์๋๋ก ๋ฐฐ์ด ๋ด์ฉ๋ค์ ํ ์ด ํ๋ก์ ํธ์ ์ ์ฉ์์ผ ๋ณด๋ฉด์ ์คํจ๋ฅผ ๊ฒช์ด ๋ด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค. ๋ฐฐ์ด ๊ฒ์ ์๊ฒ๋ง ์๊ณ ์์ง ๋ง๊ณ ๋ด ๊ฒ์ผ๋ก ๋ง๋ค ์ ์๋๋ก ๋ ธ๋ ฅํ์..๐ช