1. 메인함수에 정의된 변수는 전역변수이다.
def testFunc():
print(n) # 5
if __name__=="__main__":
n = 5
testFunc()
2. 사용자 함수에 전역변수와 같은 이름의 변수를 정의했다면, 그 변수는 해당 함수 안에서 더는 전역변수로 쓰이지 않고, 함수 내부에서만 쓰는 지역변수가 된다.
def testFunc():
if n == 5:
n = n + 1 # 오류 발생
print(n)
if __name__=="__main__":
n = 5
testFunc()
testFunc() 안에서 n = n + 1 이란 부분 때문에 n은 지역변수로 새로 정의되었다.
그런데 n에 숫자값을 대입하기도 전에 n에 n + 1 을 대입하니 오류가 발생한다.
3. 사용자 함수에서 전역변수의 값을 변경하고 싶다면 global을 이용한다.
def testFunc():
global n
if n == 5:
n = n + 1 # 6
print(n)
if __name__=="__main__":
n = 5
testFunc()
print(n) # 6
4. 전역 변수인 리스트의 '요소'는 global을 사용하지 않더라도 사용자 지정 함수에서 값을 변경할 수 있다.
def testFunc():
a[0] = 4
if __name__=="__main__":
a = [1, 2, 3]
testFunc()
print(a) # [4, 2, 3]
파이썬에서 리스트는 1, 2, 3의 값을 직접 저장하는 것이 아닌, 해당 값들이 각각 저장된 주소들을 메모리에 저장합니다.
그래서 a[0] 도 사실은 1이라는 값 자체가 아니라 1을 가리키는 주소가 저장되어 있으니, 이 주소가 가리키는 곳에 4를 대입하는 것이 가능합니다.
비슷하게 자바스크립트에서도 값을 변경하지 않는 상수를 선언할 때 const 로 선언하는데, 리스트의 요소는 const라도 변경이나 추가, 삭제 등이 가능합니다.
'IT > Python' 카테고리의 다른 글
[Python] BFS (너비 우선 탐색) 알고리즘 (0) | 2024.06.16 |
---|---|
[Python] DFS(깊이우선탐색) 알고리즘 (1) | 2024.01.28 |
[Python] 최소힙(heap) 자료구조 (1) | 2024.01.08 |
[알고리즘 공부] 그리디(Greedy) 알고리즘 (1) | 2023.10.31 |
[알고리즘 공부] 큐(Queue) (0) | 2023.10.30 |