๐Ÿ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๊ณผ์ •

dev_itzel_02โœจยท2024๋…„ 11์›” 12์ผ

๐ŸPython Knowledge

๋ชฉ๋ก ๋ณด๊ธฐ
5/5
post-thumbnail

1) Everything is object in Python

a = [1,2]
b = 3
c = 's'
d = {"a":1, "b":3}

print(type(a))
print(type(b))
print(type(c))
print(type(d))

>> <class 'list'>
>> <class 'int'>
>> <class 'str'>
>> <class 'dict'>

๐Ÿ‘‰๐Ÿผ ํŒŒ์ด์ฌ์—์„œ ๋ณ€์ˆ˜๋ฅผ ํ• ๋‹นํ•˜๋ฉด list, int, str, dict ๋ผ๋Š” object๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋ณ€์ˆ˜๊ฐ€ ๊ทธ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํ˜•ํƒœ์ด๋‹ค. ๊ฐ ๋ณ€์ˆ˜์˜ ํƒ€์ž…์„ ์ถœ๋ ฅํ•ด๋ณด๋ฉด class๊ฐ€ ๋‚˜์˜ค๋Š”๋ฐ, class๋ฅผ ๊ตฌ์ฒดํ™”ํ•œ ๊ฒƒ์ด object์ด๋‹ค.


๐Ÿงclass์™€ object

class๋Š” ์ถ”์ƒ์ ์ธ ๊ฒƒ์ด๊ณ , object๋Š” ๊ตฌ์ฒด์ ์ธ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
ํŒŒ์ด์ฌ์—์„œ ์กด์žฌํ•˜๋Š” ํƒ€์ž…์€ class๋กœ ์ •์˜๋œ๋‹ค.
class์˜ ์˜ˆ๋กœ๋Š” list, tuple, str, dict, int ๋“ฑ์ด ์žˆ๋‹ค. ์ฆ‰, class๋Š” ํƒ€์ž…์„ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ผ ๋ฟ์ด๋‹คโ—
ํŒŒ์ด์ฌ์œผ๋กœ list๋ฅผ ๋งŒ๋“ค ๋•Œ์—๋Š”, ์‚ฌ์‹ค class๋ฅผ ์ด์šฉํ•ด์„œ object๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค.
๋ณดํ†ต Reference๋ผ๊ณ  ํ•˜๋ฉฐ, ํฌ์ธํ„ฐ์˜ ๊ฐœ๋…๊ณผ ๋น„์Šทํ•˜๋‹ค.


x = 10
y = x
if (id(x) == id(y)):
    print("x์™€ y๋Š” ๊ฐ™์€ ๊ฐ์ฒด๋‹ค.")
    
>> x์™€ y๋Š” ๊ฐ™์€ ๊ฐ์ฒด๋‹ค.

y = x ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” x์— ์˜ํ•ด ์ด๋ฏธ ๋งŒ๋“ค์–ด์ง„ 10์ด๋ผ๋Š” int object๋ฅผ y๊ฐ€ ๊ทธ๋ƒฅ ๊ฐ€๋ฅดํ‚ค๊ธฐ๋งŒ ํ•œ๋‹ค.

x = x + 1
if (id(x) != id(y)):
    print("x์™€ y๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด๋‹ค.")
    
>> x์™€ y๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด๋‹ค.

x = x + 1 ์€ 11์ด๋ผ๋Š” ์ƒˆ๋กœ์šด int object๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
๊ทธ๋ฆฌ๊ณ  x๋Š” ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์ง„ int object๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

z = 10

if (id(y) == id(z)):
    print("y์™€ z๋Š” ๊ฐ™์€ memory๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.")
else:
    print("y์™€ z๋Š” ๋‹ค๋ฅธ object๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.")
    
>> y์™€ z๋Š” ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

z = 10์€ 10์ด๋ผ๋Š” int object๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š”๋ฐ, int object 10์€ ์ด๋ฏธ ์ƒ์„ฑ์ด ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๋ฐ”๋กœ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋œ๋‹ค.

z = Car()
print(type(z))

>> <class '__main__.Car'>

z = Car()์—์„œ Car๋ผ๋Š” object๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  z๋Š” Car object๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.


2) ํŒŒ์ด์ฌ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

  • Text ์˜์—ญ(์ฝ”๋“œ ์˜์—ญ)
    - ์‹คํ–‰ํ•  ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ ์ €์žฅ
    • CPU๋Š” ํ…์ŠคํŠธ ์˜์—ญ์— ์ €์žฅ๋œ ๋ช…๋ น์–ด๋ฅผ ํ•˜๋‚˜์”ฉ ๊ฐ€์ ธ๊ฐ€์„œ ์ฒ˜๋ฆฌ
  • Data ์˜์—ญ
    - ์ „์—ญ ๋ณ€์ˆ˜์™€ ์ •์  ๋ณ€์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„
    • ํ”„๋กœ๊ทธ๋žจ ์‹œ์ž‘๊ณผ ํ•จ๊ป˜ ํ• ๋‹น๋˜๋ฉฐ, ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ ์‹œ ์†Œ๋ฉธ
    • ์ปดํŒŒ์ผ ํƒ€์ž„์— ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ ๋ฏธ๋ฆฌ ๊ฒฐ์ •
  • Stack ์˜์—ญ
    - ์ง€์—ญ ๋ณ€์ˆ˜์™€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„
    • ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ๊ณผ ํ•จ๊ป˜ ํ• ๋‹น๋˜๋ฉฐ, ํ•จ์ˆ˜ ํ˜ธ์ถœ ์™„๋ฃŒ ์‹œ ์†Œ๋ฉธ
    • ์ปดํŒŒ์ผ ํƒ€์ž„์— ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ ๋ฏธ๋ฆฌ ๊ฒฐ์ •
  • Heap ์˜์—ญ
    - ์‚ฌ์šฉ์ž์˜ ๋™์  ํ• ๋‹น์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ณต๊ฐ„
    • ์‚ฌ์šฉ์ž๊ฐ€ ๊ณต๊ฐ„ ํฌ๊ธฐ ์ง์ ‘ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ
    • ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ๋„์ค‘์ธ ๋Ÿฐํƒ€์ž„์— ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ •
    • ๋™์  ํ• ๋‹น์„ ์ ์ ˆํ•œ ๊ณณ์— ์‚ฌ์šฉํ•˜๋ฉด ์ƒ์‚ฐ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๊ฐ€๋Šฅ

3) ํŒŒ์ด์ฌ์—์„œ์˜ Heap ์‚ฌ์šฉ

ํŒŒ์ด์ฌ์€ ์ž๋™์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์— ๋™์  ํ• ๋‹น ๊ธฐ๋Šฅ์ด ์—†๋‹ค. ์ฆ‰, ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๋ฒ”์œ„๋ฅผ ์กฐ์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค.

๐ŸงPython Memory Manager

  • ํฌ์ธํ„ฐ๋ฅผ ์›€์ง์—ฌ์„œ Heap ์˜์—ญ์˜ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๋ฒ”์œ„์™€ ๋‚ด๋ถ€ ๋ฒ„ํผ๋ฅผ ์กฐ์ •ํ•ด์ค€๋‹ค. Python/C API๋ฅผ ํ†ตํ•ด ์Šคํ† ๋ฆฌ์ง€๋ฅผ ๋™์ ์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค. ์Šคํ† ๋ฆฌ์ง€์˜ ๋™์  ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•  ๋•Œ๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ณต์œ , ๋ฉ”๋ชจ๋ฆฌ์˜ ์„ธ๋ถ„ํ™”, ๋ฉ”๋ชจ๋ฆฌ์˜ ์‚ฌ์ „ ํ• ๋‹น, ๊ทธ๋ฆฌ๊ณ  ์บ์‹ฑ์ด ์žˆ๋‹ค.
  • Heap ์•ˆ์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ interpreter๊ฐ€ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด ์˜์—ญ์˜ ๋ฒ”์œ„๋ฅผ ์กฐ์ •ํ•จ์œผ๋กœ์จ, interpreter๊ฐ€ ์ž๋™์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ os๋กœ ํ• ๋‹นํ•˜์ง€ ์•Š๊ณ  ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ฐ€ ์‚ฌ์šฉ๋  ๋•Œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์šด์˜๋œ๋‹ค. ์ฆ‰, ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์— ์žˆ์–ด์„œ os์˜ ๊ณผ๋ถ€ํ•˜๋ฅผ ์ค„์—ฌ์ค€๋‹ค.
  • ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋จ์— ๋”ฐ๋ผ ๊ทธ์— ๋งž๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ทธ๋•Œ๊ทธ๋•Œ python memory manager๊ฐ€ os์™€ ์†Œํ†ตํ•˜๋ฉฐ ํ• ๋‹นํ•˜๊ณ  ๊ฒฐ๊ณผ๊ฐ’์ด return๋˜๊ฑฐ๋‚˜ ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜๊ฐ€ ์‚ฌ์šฉ์„ ๋ฉˆ์ถ”์—ˆ์„ ๋•Œ, ๋ฐ”๋กœ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์†Œ๋ฉธ๋˜๋Š” ํ˜•์‹์ด๋‹ค.

4) ํŒŒ์ด์ฌ์—์„œ์˜ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๊ณผ์ •

def f2(x):
    x = x + 1
    return x
    
def f1(x):
    x = x * 2
    y = f2(x)
    return y
    
# main
y = 5
z = f1(y)
  • main ํ•จ์ˆ˜์—์„œ y = 5์™€ f1 ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
  • f1 ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด stack ์˜์—ญ์— f1 ์˜์—ญ์ด ์ƒ์„ฑ๋œ๋‹ค.
  • f1 ์˜์—ญ์—์„œ ๊ณ„์‚ฐ์‹์— ์˜ํ•ด int object 10์ด ์ƒ์„ฑ๋˜๊ณ  x๋Š” ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
  • f2 ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด stack ์˜์—ญ์— f2 ์˜์—ญ์ด ์ƒ์„ฑ๋œ๋‹ค.
  • f2 ์˜์—ญ์—์„œ ๊ณ„์‚ฐ์‹์— ์˜ํ•ด int object 11์ด ์ƒ์„ฑ๋˜๊ณ  y๋Š” ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

5) ํ• ๋‹น ํ•ด์ œ

  • ๋จผ์ € stack์˜ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” f2๊ฐ€ ํ•ด์ œ๋œ๋‹ค.
  • ๊ทธ ๋‹ค์Œ f1์ด ํ•ด์ œ๋˜๊ณ , ๋ณ€์ˆ˜ x๊ฐ€ ์—†์–ด์ง์— ๋”ฐ๋ผ ์•„๋ฌด๊ฒƒ๋„ ๊ฐ€๋ฆฌํ‚ค์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— int object 10๋„ ์‚ฌ๋ผ์ง„๋‹ค.
  • reference counting์ด 0์ด ๋จ์— ๋”ฐ๋ผ object๊ฐ€ ์‚ฌ๋ผ์ง€๋Š” Garbage collector์ด๋‹ค. ํŒŒ์ด์ฌ์€ reference counting์„ ์ด์šฉํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.

  • ๋งˆ์ง€๋ง‰์œผ๋กœ main ํ•จ์ˆ˜์˜ ๋ณ€์ˆ˜ z๋Š” 11์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
profile
๐Ÿœ๐Ÿ‘ฃsteadiness๐Ÿœ๐Ÿ‘ฃ

0๊ฐœ์˜ ๋Œ“๊ธ€