
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๋ก ์ ์๋๋ค.
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๋ฅผ ๊ฐ๋ฆฌํจ๋ค.


ํ์ด์ฌ์ ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํด์ฃผ๋ ์ธ์ด์ด๊ธฐ ๋๋ฌธ์ ๋์ ํ ๋น ๊ธฐ๋ฅ์ด ์๋ค. ์ฆ, ์ฌ์ฉ์๊ฐ ์ง์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ฒ์๋ฅผ ์กฐ์ ํ์ง ์๋๋ค.
- ํฌ์ธํฐ๋ฅผ ์์ง์ฌ์ Heap ์์ญ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ฒ์์ ๋ด๋ถ ๋ฒํผ๋ฅผ ์กฐ์ ํด์ค๋ค. Python/C API๋ฅผ ํตํด ์คํ ๋ฆฌ์ง๋ฅผ ๋์ ์ผ๋ก ๊ด๋ฆฌํ๋ค. ์คํ ๋ฆฌ์ง์ ๋์ ๊ด๋ฆฌ๊ฐ ํ์ํ ๋๋ ๋ฉ๋ชจ๋ฆฌ์ ๊ณต์ , ๋ฉ๋ชจ๋ฆฌ์ ์ธ๋ถํ, ๋ฉ๋ชจ๋ฆฌ์ ์ฌ์ ํ ๋น, ๊ทธ๋ฆฌ๊ณ ์บ์ฑ์ด ์๋ค.
- Heap ์์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ interpreter๊ฐ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํด ์์ญ์ ๋ฒ์๋ฅผ ์กฐ์ ํจ์ผ๋ก์จ, interpreter๊ฐ ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ os๋ก ํ ๋นํ์ง ์๊ณ ๊ฐ์ง๊ณ ์๋ค๊ฐ ์ฌ์ฉ๋ ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก ์ด์๋๋ค. ์ฆ, ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์์ด์ os์ ๊ณผ๋ถํ๋ฅผ ์ค์ฌ์ค๋ค.
- ๋ณ์์ ํจ์๊ฐ ํธ์ถ๋จ์ ๋ฐ๋ผ ๊ทธ์ ๋ง๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ทธ๋๊ทธ๋ python memory manager๊ฐ os์ ์ํตํ๋ฉฐ ํ ๋นํ๊ณ ๊ฒฐ๊ณผ๊ฐ์ด return๋๊ฑฐ๋ ๋ณ์์ ํจ์๊ฐ ์ฌ์ฉ์ ๋ฉ์ถ์์ ๋, ๋ฐ๋ก ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ฉธ๋๋ ํ์์ด๋ค.
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)
y = 5์ f1 ํจ์๋ฅผ ํธ์ถํ๋ค.f1 ํจ์๋ฅผ ํธ์ถํ๋ฉด stack ์์ญ์ f1 ์์ญ์ด ์์ฑ๋๋ค.f1 ์์ญ์์ ๊ณ์ฐ์์ ์ํด int object 10์ด ์์ฑ๋๊ณ x๋ ํด๋น ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํจ๋ค.f2 ํจ์๋ฅผ ํธ์ถํ๋ฉด stack ์์ญ์ f2 ์์ญ์ด ์์ฑ๋๋ค.f2 ์์ญ์์ ๊ณ์ฐ์์ ์ํด int object 11์ด ์์ฑ๋๊ณ y๋ ํด๋น ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํจ๋ค.

f2๊ฐ ํด์ ๋๋ค.f1์ด ํด์ ๋๊ณ , ๋ณ์ x๊ฐ ์์ด์ง์ ๋ฐ๋ผ ์๋ฌด๊ฒ๋ ๊ฐ๋ฆฌํค์ง ์๊ธฐ ๋๋ฌธ์ int object 10๋ ์ฌ๋ผ์ง๋ค. 