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

๐Ÿ Python18

์ดํŽ™ํ‹ฐ๋ธŒ ํŒŒ์ด์ฌ 2์žฅ - ๋ฆฌ์ŠคํŠธ์™€ ๋”•์…”๋„ˆ๋ฆฌ Better way 11 ์‹œํ€€์Šค๋ฅผ ์Šฌ๋ผ์ด์‹ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ตํ˜€๋ผa = ['a', 'b', 'c', 'd', 'e']# ์ฒ˜์Œ ๋˜๋Š” ๋๊นŒ์ง€ ์Šฌ๋ผ์ด์‹ฑ ํ• ๋•Œ๋Š” ์ฒ˜์Œ๊ณผ ๋ ์ธ๋ฑ์Šค๋ฅผ ์ƒ๋žตํ•˜์žassert a[:5] == a[0:5] # Trueassert a[5:] == a[5:len(a)] # True# ์Šฌ๋ผ์ด์‹ฑ ๊ฒฐ๊ณผ๋Š” ์ƒˆ๋กœ์šด ๊ฐ์ฒดb = a[3:]assert a is b # False (๋‹ค๋ฅธ ๊ฐ์ฒด)assert a[3:] == b # True# ์‹œ์ž‘๊ณผ ๋ ์ธ๋ฑ์Šค ์ƒ๋žตํ•˜๋ฉด ์›๋ž˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ณต์‚ฌํ•œ ๋ฆฌ์ŠคํŠธb = a[:]print(b)>>> ['a', 'b', 'c', 'd', 'e'] Better way 12 ์ŠคํŠธ๋ผ์ด๋“œ์™€ ์Šฌ๋ผ์ด์Šค๋ฅผ ํ•œ ์‹์— ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์ง€ ๋ง๋ผ# ์Šฌ๋ผ์ด๋“œ list[์‹œ์ž‘:๋:์ฆ๊ฐ€๊ฐ’]x = ['๋นจ๊ฐ•', '์ฃผํ™ฉ', .. 2025. 3. 12.
์ดํŽ™ํ‹ฐ๋ธŒ ํŒŒ์ด์ฌ 1์žฅ - ํŒŒ์ด์ฌ๋‹ต๊ฒŒ ์ƒ๊ฐํ•˜๊ธฐ Better Way 3. bytes์™€ str ์ฐจ์ด๋ฅผ ์•Œ์•„๋‘๋ผ# ์ž˜๋ชป๋œ ์˜ˆprint(b"hello" + "world") # TypeError ๋ฐœ์ƒ# ์˜ฌ๋ฐ”๋ฅธ ์˜ˆprint(b"hello" + b"world") # bytes๋ผ๋ฆฌ ๊ฒฐํ•ฉ ๊ฐ€๋Šฅprint("hello" + "world") # str๋ผ๋ฆฌ ๊ฒฐํ•ฉ ๊ฐ€๋Šฅbytes์™€ str์€ ๊ฒฐํ•ฉ์ด ๋ถˆ๊ฐ€๋Šฅ # ํ…์ŠคํŠธ ๋ชจ๋“œ๋กœ ํŒŒ์ผ ์ฝ๊ธฐ (str ๋ฐ˜ํ™˜)with open("example.txt", "r", encoding="utf-8") as f: text = f.read() print(text)# ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ชจ๋“œ๋กœ ํŒŒ์ผ ์ฝ๊ธฐ (bytes ๋ฐ˜ํ™˜)with open("example.txt", "rb") as f: binary_data = f.read() prin.. 2025. 3. 6.
[Python] *, ** ์‚ฌ์šฉ๋ฒ• ํŒจํ‚น, ์–ธํŒจํ‚นfunc(*iterable)iterable ๊ฐ์ฒด๋ฅผ ์–ธํŒจํ‚นํ•˜์—ฌ, ๊ฐœ๋ณ„ ์ธ์ž๋กœ ์ „๋‹ฌํ•จ>>> def who(a,b,c): print(a,b,c, sep =',') >> who(*[1,2,3])1, 2, 3>> who(*[0.1, 0.2, 0.3])0.1, 0.2, 0.3 func(**dict)>>> def who(a,b,c): print(a,b,c, sep =',') >> d = dict(a = 1, b = 2, c = 3)>> who(*d) # key๊ฐ€ ์ „๋‹ฌ๋œ๋‹ค.a, b, c>> who(**d) # value๊ฐ€ ์ „๋‹ฌ๋œ๋‹ค.1, 2, 3 def func(*args)๊ฐ’๋“ค์ด ํŠœํ”Œ๋กœ ๋ฌถ์—ฌ์„œ args์— ์ „๋‹ฌ๋œ๋‹ค.>>> def func(*args): print(args) >> fu.. 2025. 2. 18.
[Python] GIL์„ ํ•ด์ œํ•ด๋ณด์ž ๋“œ๋””์–ด Python 3.13.0 ์—์„œ GIL์ด ํ•ด์ œ ๋˜์—ˆ๋‹ค. Python 3.13.0 ์œผ๋กœ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋”ฉ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด๋ ค ํ–ˆ์ง€๋งŒ, ์‹คํŒจํ–ˆ๋‹ค.์ฐพ์•„๋ณด๋‹ˆ, ์ผ๋ฐ˜ CPython 3.13 ์—์„  ์•„์ง ์•ˆ๋˜๊ณ , GIL์„ ํ•ด์ œํ•˜์—ฌ ๋นŒ๋“œ ๋œ CPython์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.pyenv ๋ฅผ ํ™œ์šฉํ•˜์—ฌ GIL์ด ํ•ด์ œ๋œ CPython์„ ๊ตฌํ•ด๋ณด์žpyenv install 3.13t-devpyenv shell 3.13t-devpython3 --version # Python 3.13.0+ ํ˜•์‹์œผ๋กœ ๋‚˜์˜ค๋ฉด ์„ฑ๊ณต   GIL์ด ํ•ด์ œ๋˜์–ด ์„ฑ๋Šฅ์ด ์‹ฑ๊ธ€ ์“ฐ๋ ˆ๋“œ ๊ทธ๋ ‡๋‹ค๋ฉด 8์ฝ”์–ด 8์“ฐ๋ ˆ๋“œ M3 ๊ธฐ์ค€ CPU๋ฅผ ์ž˜ ๊ฐˆ๊ตฌ๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ž  ํ…Œ์ŠคํŠธ ์ฝ”๋“œimport mathimport multiprocessingimport sysimport sysconfigi.. 2024. 10. 11.
[Python] ํŒŒ์ด์ฌ ๊ฐœ๋ฐœ์ž ๋ฉด์ ‘ ์งˆ๋ฌธ ํŒŒ์ด์ฌ ์ž๋ฃŒ๊ตฌ์กฐ ํŠน์ง•ํŠน์ง•ListDictionarySetTuple์ˆœ์„œ ์œ ์ง€OPython 3.7 ๋ถ€ํ„ฐ OXO์ธ๋ฑ์‹ฑOXXO๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์„ฑOOOX์ค‘๋ณต ํ—ˆ์šฉOํ‚ค๋Š” ์ค‘๋ณต ๋ถˆ๊ฐ€, ๊ฐ’์€ ๊ฐ€๋ŠฅXO๋ฐ์ดํ„ฐ์ˆœ์ฐจ ๋ฐ์ดํ„ฐ ํ‚ค-๊ฐ’ ์Œ ๋ฐ์ดํ„ฐ ๊ณ ์œ ํ•œ ์š”์†Œ ์ง‘ํ•ฉ๋ถˆ๋ณ€ ๋ฐ์ดํ„ฐ  GIL(Global Interpreter Lock)Python ๋งค์ปค๋‹ˆ์ฆ˜์œผ๋กœ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ โ†’ ํ•œ ๋ฒˆ์˜ ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋งŒ ์‹คํ–‰๋จ๋ชฉ์ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ - ์ฐธ์กฐ ์นด์šดํŠธ๋ฅผ ํ†ตํ•ด ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋ฅผ ์ž‘๋™ํ•˜๋Š” ๋ฐ, ์ด ๋ถ€๋ถ„์ด race condition์— ์ทจ์•ฝํ•จ, ์ด๋ฅผ ํ•ด๊ฒฐ๊ฐ„์†Œํ™” - ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€์žฅ์ GIL๋กœ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์˜ ๋ณต์žกํ•œ ๋ฌธ์ œ๋ฅผ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐ โ†’ ๊ทธ๋ƒฅ ์Šค๋ ˆ๋“œ๋ฅผ ์ž ๊ถˆ๋ฒ„๋ฆผ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ์œ ์ง€๋‹จ์ ๋ณ‘๋ ฌ์„ฑ ์ œ.. 2024. 5. 26.
[Python] GIL์ด๋ž€? ํŒŒ์ด์ฌ์—์„œ์˜ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ํŒŒ์ด์ฌ GIL์ด๋ž€?ํŒŒ์ด์ฌ์€ ๋‹ค๋ฅธ ์–ธ์–ด (C++ or Java)์˜ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ์™€ ๋‹ค๋ฅธ ์ ์ด ์žˆ๋‹ค. ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์•„๋‹ˆ๋‹ค ๋ฌด์Šจ ๋ง์ด๋ƒ ํ•˜๋ฉด ๋™์‹œ์„ฑ์„ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•œ๋‹ค.์œ„์˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์“ฐ๋ ˆ๋“œ๋ฅผ 3๊ฐœ๋กœ ๋‚˜๋ˆ„์–ด ์‹คํ–‰ํ•˜๋”๋ผ๋„ GIL๋ฅผ ๊ฐ€์ง„ ์“ฐ๋ ˆ๋“œ๋งŒ ์‹คํ–‰๋˜๊ณ , ๋‚˜๋จธ์ง€ ์“ฐ๋ ˆ๋“œ๋Š” GIL release ๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.๋™์‹œ์„ฑ์„ ๊ฐ–๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์‹ฑ์„ ํ™œ์šฉํ•ด์•ผ ํ•œ๋‹ค. ๋‹ค๋งŒ ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค๋Š” ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ์— ๋น„ํ•ด ์˜ค๋ฒ„ํ—ค๋“œ๋‚˜ ๋ฐ์ดํ„ฐ ๊ตํ™˜ ์–ด๋ ค์›€ ๋“ฑ์˜ ๋‹จ์ ์ด ์žˆ๋‹ค. ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ์˜ ์‚ฌ์šฉ์‚ฌ์‹ค์ƒ CPU ์ฝ”์–ด๋‚˜ ์“ฐ๋ ˆ๋“œ๋ฅผ ๋ชป๊ตด๋ฆฌ๋Š”๋ฐ, ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ๋ฅผ ์–ธ์ œ ์‚ฌ์šฉํ•˜๋ƒI/O Bound๋ฅผ ํ•ด๊ฒฐํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. DB, API, UI ๋“ฑ์˜ ์ž‘์—…๋“ค์€ CPU ์ž‘์—… ์†๋„์— ๋น„ํ•ด ํ˜„์ €ํžˆ ๋Š๋ฆฌ๊ธฐ์— CPU ์ž…์žฅ์—์„œ๋Š” I/O ์š”์†Œ๋“ค๋กœ ์ธํ•ด ์ž‘์—… ์†์‹ค์„.. 2024. 5. 6.