함수 내 global 선언이 필요한 객체와 그렇지 않은 객체
2024. 2. 13. 19:43ㆍ코딩 교훈 기록
파이썬으로 코딩을 하다 파이썬의 전역변수에 대한 의문이 생겼다.
예를 들어 dfs 같은 알고리즘 문제를 풀 때 int 나 str 객체는 함수 안에서 전역변수로 지정해야 활용할 수 있지만, list나, dict는 전역변수로 지정하지 않고도 사용할 수 있다.
그 이유가 궁금해서 찾아본 결과 2가지 차이가 있음을 알 수 있었다.
- mutable, immutable 객체의 차이
- 재할당을 하냐 안 하냐 차이
mutable은 ( list, dict, set ), immutable은 ( int, str, tuple ) 등이 있는데,
immutable은 = 연산자를 사용하여 값을 변경하려 할 때마다 새로운 객체를 생성하여 재할당하지만,
mutable은 indexing, slicing등으로, 재할당 하지 않고도 값을 변경할 수 있다.
mutable 객체의 경우에는 객체를 생성하지 않고 바로 수정이 가능하기에 전역변수로 지정하지 않아도 함수 내 로컬 mutable 변수의 값 수정이 밖까지 반영된다.
하지만 로컬 immutable 변수는 함수 안에서 수정하려고 해도, 지역변수로써 immutable 라는 이름의 객체를 새로 생성하고 할당한 것이기에 함수 밖 immutable 변수는 변하지 않는다.
따라서 immutable 객체는 수정하려면 함수 안에서 global을 사용해 전역변수로 지정해줘야 한다.
하지만 mutable 객체라도 아예 재할당을 해야 하는 경우라면 mutable 객체도 전역변수 지정을 해줘야 한다!
'코딩 교훈 기록' 카테고리의 다른 글
재귀 호출하는 함수 코드 2개 비교 (0) | 2024.02.17 |
---|---|
간단한 Bool 논리 연산들 (0) | 2024.02.13 |
리스트 컴프리헨션과 조건문 (0) | 2024.02.11 |
리스트 언패킹 하는 2가지 방법의 차이 (0) | 2024.02.05 |
알면 유용한 PyCharm 단축키 (0) | 2024.02.05 |