python 전역변수, 배열

Minji·2022년 6월 2일
0

전역변수, 배열에 대해 이해하기

def change():
	g_variable=1 #(지역변수)
	lst[1]=4 

g_variable = 0 #(전역변수)
lst = [1,2,3] #(immutable)

print(lst,g_variable) #[1,2,3] 0
change()
print(lst,g_variable) #[1,4,3] 0

python namespace

namespace?

프로그래밍 언어에서 특정한 객체(Object)를 이름에 따라 구분할 수 있는 범위를 의미함.

python의 내부의 모든 것은 객체로 구성되며 이들 각각은 특정 이름과의 매핑 관계를 갖고 이 매핑을 포함하고 있는 공간을 네임스페이스라고 한다.

변수 이름, 함수 이름을 겹치지 않게 정하기 어려움 -> 네임스페이스를 도입하여 특정한 하나의 이름이 통용될 수 있는 범위를 제한한 것
즉, 소속된 네임스페이스가 다르면 같은 이름이 다른 개체를 가리키도록 하는 것이 가능

파이썬의 네임스페이스

이름들과 실제 객체들 사이의 매핑
1. 전역 네임스페이스
모듈별로 존재
모듈 전체에서 통용될 수 있는 이름들이 소속
2. 지역 네임스페이스
함수 및 메서드 별로 존재
함수 내의 지역 변수들의 이름이 소속
3. 빌트인 네임스페이스
기본 내장 함수 및 기본 예외들의 이름이 소속
파이썬으로 작성된 모든 코드 범위가 포함

  • 특징
  • 네임스페이스는 딕셔너리 형태로 구현됨
  • 모든 이름 자체는 문자열로 되어 있고 각각은 해당 네임스페이스의 범위에서 실제 객체를 가리킴
  • 이름과 실제 객체 사이의 매핑은 가변적(mutable)이므로 런타임동안 새로운 이름이 추가될 수도 있다.
  • 빌트인 네임스페이스는 함부로 추가, 삭제 불가

변수 스코프

네임스페이스의 접근성에 대해 고려하기 위한 개념
어떤 네임스페이스에 직접 접근이 가능한 프로그래밍의 어떤 부분이라고 정의 가능
블록 단위의 스코프가 존재하지 않고 오직 전역 변수 및 스코프 및 지역 변수 스코프만이 존재

mutable, immutable

변수가 선언되고 그 값을 바꿀 수 있다 = mutable
아니다 = immutable

숫자, 문자열 등의 변수, 튜플 immutable
리스트 변수는 mutable
즉, 리스트 변수는 값을 선언한 이후에도 바꿀 수 있기 때문에 값을 바꿔줄 때 새로운 객체를 생성하지 않는다.

a=1
a+=1

위와 같은 경우는 a 자체의 값이 바뀐게 아니라 새로운 a 객체를 생성하여 해당 값을 할당하는 방식

결론

def change():
	g_variable=1
	lst[1]=4
	print(globals())#globals는 0,[1,4,3]
	print(locals()) # locals는 1

g_variable = 0
lst = [1,2,3]
print(globals(),locals()) # globals,locals 모두 0,[1,2,3]
change()
print(globals(),locals())# globals,locals 모두 0,[1,4,3]

참고

https://medium.com/@dltkddud4403/python-지역변수-전역변수-관련-개념-4ea2a1865071
https://hcnoh.github.io/2019-01-30-python-namespace

profile
매일매일 성장하기 : )

0개의 댓글