KR_Variable - somaz94/python-study GitHub Wiki
๋ณ์๋ ๋ฐ์ดํฐ(๊ฐ)๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ด๋ฆ์ด๋ค. ํ์ด์ฌ์์๋ ๋ณ์๋ฅผ ์ ์ธํ ๋ ์๋ฃํ์ ๋ช ์ํ์ง ์์๋ ๋๋ค.
# ๋ณ์ ์์ฑ๊ณผ ํ ๋น
name = "John" # ๋ฌธ์์ด
age = 25 # ์ ์
height = 175.5 # ์ค์
numbers = [1, 2, 3] # ๋ฆฌ์คํธ
# ๋ณ์์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ํ์ธ
print(id(name)) # ๋ณ์๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ์ถ๋ ฅ
print(type(name)) # ๋ณ์์ ์๋ฃํ ํ์ธ
โ ํน์ง:
- ์๋ฃํ์ ๋ช ์์ ์ผ๋ก ์ ์ธํ์ง ์์
- ๊ฐ์ด ์ ์ฅ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํด
- ๋์ ํ์ดํ ์ง์ (ํ์ ์ด ์๋์ผ๋ก ๊ฒฐ์ )
# ๊ธฐ๋ณธ ํ ๋น
x = 10
# ๋ค์ค ํ ๋น
a, b = 1, 2
x = y = z = 0
# ํํ ํ ๋น
coord = (3, 4)
x, y = coord
# ๋ฆฌ์คํธ ํ ๋น
[a, b] = [1, 2]
# ๊ฐ ๊ตํ
a, b = b, a # ๋ ๋ณ์์ ๊ฐ์ ๊ตํ
# ๋ณ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ํ ๋น
first, *rest = [1, 2, 3, 4, 5] # first = 1, rest = [2, 3, 4, 5]
*beginning, last = [1, 2, 3, 4] # beginning = [1, 2, 3], last = 4
โ ํ ๋น ๋ฐฉ๋ฒ:
- ๋จ์ผ ๊ฐ ํ ๋น
- ๋ค์ค ๊ฐ ๋์ ํ ๋น
- ํํ/๋ฆฌ์คํธ ์ธํจํน
- ๊ฐ์ ๊ฐ ๋์ ํ ๋น
- ๋ณ ์ฐ์ฐ์(*)๋ฅผ ์ด์ฉํ ์ผ๋ถ ์์ ํ ๋น
# ์ฐธ์กฐ
list1 = [1, 2, 3]
list2 = list1 # list2๋ list1๊ณผ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐ
# ์์ ๋ณต์ฌ (Shallow Copy)
list2 = list1[:] # ์ฌ๋ผ์ด์ฑ์ ํตํ ๋ณต์ฌ
list2 = list1.copy() # copy() ๋ฉ์๋ ์ฌ์ฉ
list2 = list(list1) # list() ํจ์ ์ฌ์ฉ
# ๊น์ ๋ณต์ฌ (Deep Copy)
import copy
list2 = copy.deepcopy(list1)
โ ๋ณต์ฌ ๋ฐฉ๋ฒ:
- ์ฐธ์กฐ: ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํด
- ์์ ๋ณต์ฌ: ์๋ก์ด ๊ฐ์ฒด ์์ฑ (์ค์ฒฉ ๊ฐ์ฒด๋ ์ฐธ์กฐ)
- ๊น์ ๋ณต์ฌ: ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ์๋ก ์์ฑ
# ์ ์ญ ๋ณ์
global_var = 100
def my_function():
# ์ง์ญ ๋ณ์
local_var = 200
print(local_var)
# ์ ์ญ ๋ณ์ ์ฌ์ฉ
global global_var
global_var = 300
# ํจ์ ๋ด์์ ์ ์ญ ๋ณ์ ์์
x = 1
def change_global():
global x
x = 2
# ๋ด์ฅ ์ค์ฝํ
# ํจ์ ๋ด ํจ์์์ ์ธ๋ถ ํจ์์ ๋ณ์ ์ ๊ทผ
def outer():
outer_var = "์ธ๋ถ ๋ณ์"
def inner():
nonlocal outer_var # outer ํจ์์ ๋ณ์ ์ฌ์ฉ
outer_var = "๋ณ๊ฒฝ๋ ์ธ๋ถ ๋ณ์"
inner()
print(outer_var) # "๋ณ๊ฒฝ๋ ์ธ๋ถ ๋ณ์" ์ถ๋ ฅ
โ ๋ณ์ ๋ฒ์:
- ์ ์ญ ๋ณ์: ํ๋ก๊ทธ๋จ ์ ์ฒด์์ ์ ๊ทผ ๊ฐ๋ฅ
- ์ง์ญ ๋ณ์: ํจ์ ๋ด์์๋ง ์ ๊ทผ ๊ฐ๋ฅ
- global ํค์๋: ํจ์ ๋ด์์ ์ ์ญ ๋ณ์ ์ฌ์ฉ
- nonlocal ํค์๋: ์ค์ฒฉ ํจ์์์ ์ธ๋ถ ํจ์์ ๋ณ์ ์ฌ์ฉ
# ์ฌ๋ฐ๋ฅธ ๋ณ์๋ช
name = "John"
user_age = 25
_private = "hidden"
camelCase = "style"
snake_case = "style"
# ์๋ชป๋ ๋ณ์๋ช
# 2name = "John" # ์ซ์๋ก ์์ ๋ถ๊ฐ
# my-name = "John" # ํ์ดํ ์ฌ์ฉ ๋ถ๊ฐ
# class = "Python" # ์์ฝ์ด ์ฌ์ฉ ๋ถ๊ฐ
โ ์๋ช ๊ท์น:
- ๋ฌธ์, ์ซ์, ์ธ๋์ค์ฝ์ด(_) ์ฌ์ฉ ๊ฐ๋ฅ
- ์ซ์๋ก ์์ํ ์ ์์
- ๋์๋ฌธ์ ๊ตฌ๋ถ
- ์์ฝ์ด ์ฌ์ฉ ๋ถ๊ฐ
- ์ค๋ค์ดํฌ ์ผ์ด์ค ๊ถ์ฅ (PEP 8)
โ ์์ฝ์ด ๋ชฉ๋ก:
# Python ์์ฝ์ด ํ์ธ
import keyword
print(keyword.kwlist)
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break',
'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally',
'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal',
'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
ํ์ด์ฌ์ ๋ชจ๋ ๋ณ์๋ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ฉฐ, ๊ฐ์ฒด๋ ๋ถ๋ณ(immutable) ๋๋ ๊ฐ๋ณ(mutable)์ผ๋ก ๋ถ๋ฅ๋ฉ๋๋ค.
# ๋ถ๋ณ ๊ฐ์ฒด (Immutable)
a = 10
print(id(a))
a = a + 1 # ์๋ก์ด ๊ฐ์ฒด๊ฐ ์์ฑ๋จ
print(id(a)) # ๋ค๋ฅธ ID ์ถ๋ ฅ
# ๊ฐ๋ณ ๊ฐ์ฒด (Mutable)
my_list = [1, 2, 3]
print(id(my_list))
my_list.append(4) # ๊ฐ์ ๊ฐ์ฒด๊ฐ ์์ ๋จ
print(id(my_list)) # ๊ฐ์ ID ์ถ๋ ฅ
โ ๊ฐ์ฒด ๋ถ๋ณ์ฑ:
- ๋ถ๋ณ ๊ฐ์ฒด: ์์ฑ ํ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅ (int, float, str, tuple, frozenset ๋ฑ)
- ๊ฐ๋ณ ๊ฐ์ฒด: ์์ฑ ํ ๋ณ๊ฒฝ ๊ฐ๋ฅ (list, dict, set ๋ฑ)
- ๋ถ๋ณ ๊ฐ์ฒด๋ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ์ ๊ฐ์ฒด๊ฐ ์์ฑ๋จ
- ๊ฐ๋ณ ๊ฐ์ฒด๋ ๊ฐ์ด ๋ณ๊ฒฝ๋์ด๋ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ์ ์ง
ํ์ด์ฌ์์๋ del
ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ณ์๋ฅผ ์ญ์ ํ ์ ์์ต๋๋ค.
x = 10
print(x) # 10 ์ถ๋ ฅ
del x
# print(x) # NameError: name 'x' is not defined
# ๋ฆฌ์คํธ ์์ ์ญ์
my_list = [1, 2, 3, 4]
del my_list[1] # ์ธ๋ฑ์ค 1์ ์์ ์ญ์
print(my_list) # [1, 3, 4] ์ถ๋ ฅ
# ๋์
๋๋ฆฌ ์์ ์ญ์
my_dict = {'a': 1, 'b': 2}
del my_dict['a'] # ํค 'a'์ ๊ฐ ์ญ์
print(my_dict) # {'b': 2} ์ถ๋ ฅ
Python 3.5 ์ด์์์๋ ํ์ ํํธ๋ฅผ ํตํด ๋ณ์์ ํ์ ์ ๋ช ์ํ ์ ์์ต๋๋ค.
# ๋ณ์ ํ์
ํํธ
name: str = "John"
age: int = 25
height: float = 175.5
is_active: bool = True
# ํจ์ ํ๋ผ๋ฏธํฐ์ ๋ฐํ ํ์
ํํธ
def greeting(name: str) -> str:
return f"Hello, {name}!"
# ๋ณตํฉ ํ์
ํํธ
from typing import List, Dict, Tuple, Optional, Union
# ๋ฆฌ์คํธ ํ์
ํํธ
numbers: List[int] = [1, 2, 3]
# ๋์
๋๋ฆฌ ํ์
ํํธ
user: Dict[str, Union[str, int]] = {
"name": "John",
"age": 25
}
# ํํ ํ์
ํํธ
point: Tuple[int, int] = (10, 20)
# Optional ํ์
ํํธ(None์ด ๋ ์ ์์)
maybe_name: Optional[str] = "John"
maybe_name = None # ์ ํจํจ
โ ํ์ ํํธ ์ฌ์ฉ ์ด์ :
- ์ฝ๋ ๊ฐ๋ ์ฑ ํฅ์
- IDE ์๋ ์์ฑ ๋ฐ ํ์ ์ฒดํฌ ์ง์
- mypy ๊ฐ์ ๋๊ตฌ๋ก ์ ์ ํ์ ๊ฒ์ฌ ๊ฐ๋ฅ
- ๋ฐํ์์๋ ์ํฅ์ ์ฃผ์ง ์์ (์ฃผ์๊ณผ ์ ์ฌ)
ํ์ด์ฌ์ ์ฐธ์กฐ ์นด์ดํ ๊ณผ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ํตํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
import sys
# ๊ฐ์ฒด์ ์ฐธ์กฐ ์นด์ดํธ ํ์ธ
x = "Hello"
print(sys.getrefcount(x) - 1) # ํจ์ ํธ์ถ๋ ์ฐธ์กฐ๋ฅผ ์์ฑํ๋ฏ๋ก 1์ ๋นผ์ค
# ์์ ์ ์ ๊ฐ์ฒด ํ(interning)
a = 10
b = 10
print(a is b) # True, ๊ฐ์ ๊ฐ์ฒด ์ฐธ์กฐ
# ํฐ ์ ์๋ ๋ณ๋ ๊ฐ์ฒด๋ก ์์ฑ
c = 1000000
d = 1000000
print(c is d) # False, ๋ค๋ฅธ ๊ฐ์ฒด ์ฐธ์กฐ(Python ๊ตฌํ์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์์)
# ๋ฌธ์์ด ์ธํฐ๋
s1 = "hello"
s2 = "hello"
print(s1 is s2) # True, ๊ฐ์ ๊ฐ์ฒด ์ฐธ์กฐ
# ๊ฐ๋น์ง ์ปฌ๋ ์
์ง์ ํธ์ถ(์ผ๋ฐ์ ์ผ๋ก๋ ์๋์ผ๋ก ์คํ๋จ)
import gc
gc.collect() # ๋๋ฌํ ์ ์๋ ๊ฐ์ฒด ๋ฉ๋ชจ๋ฆฌ ํด์
โ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ํน์ง:
- ์ฐธ์กฐ ์นด์ดํ : ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ์ฐธ์กฐ ์๋ฅผ ์ถ์ ํ์ฌ ์ฐธ์กฐ๊ฐ 0์ด ๋๋ฉด ๋ฉ๋ชจ๋ฆฌ ํด์
- ๊ฐ๋น์ง ์ปฌ๋ ์ : ์ํ ์ฐธ์กฐ ๋ฑ ์ฐธ์กฐ ์นด์ดํ ์ผ๋ก ํด๊ฒฐ๋์ง ์๋ ๊ฒฝ์ฐ ์ฒ๋ฆฌ
- ๊ฐ์ฒด ํ๋ง: ์์ ์ ์์ ์งง์ ๋ฌธ์์ด์ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ ์ํด ์ฌ์ฌ์ฉ
- ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ: ํ์ด์ฌ์ ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ์ง๋ง, ํฐ ๋ฐ์ดํฐ์ ์ ๋ค๋ฃฐ ๋๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ฃผ์ํด์ผ ํจ