[Python] 지역변수, 전역변수, global변수, 정적변수

도갱도갱·2021년 12월 28일
1

Python

목록 보기
10/34

출처: https://galid1.tistory.com/306 [배움이 즐거운 개발자]
출처: https://sosoeasy.tistory.com/282

지역변수

  • 함수 내에서 생성된 변수
  • 함수 호출이 종료되면 메모리에서 제거됨으로 외부참조가 불가능하다.

전역변수

  • 함수 밖의 전역 공간에 선언된 변수
  • 함수 내에서 참조 가능하며, 함수 내에서만 변경이 가능하다.
  • 함수 밖에서 참조하면 원래의 값으로 돌아간다.

global 변수

  • 함수 내에서 참조와 변경이 가능하며, 함수 밖에서 참조했을 때도 값이 반영된다.
a =5
b = 6

def sum():
    a = 10
    global b
    b = 10
    print(f"sum 함수 안 지역변수 a:{a}")
    print(f"sum 함수 안 global변수 b:{b}")

sum()

print(f"sum 함수 밖 전역변수 a:{a}")
print(f"sum 함수 밖 global변수 b:{b}")

정적(static) 변수

  • static 변수는 method가 아닌 클래스 내부에 선언된 변수이다.
  • 정의된 클래스를 통해 호출할 수 있지만 직접 호출할 수 없다.
  • 클래스 변수라고도 한다. (클래스는 클래스변수와 객체변수로 나눌수 있다.)
  • 클래스를 통해 접근해야 값을 변경할 수 있으며, 모든 객체가 동일한 값을 가진다.
  • 객체를 통해 참조/변경 하는 순간, 동일한 이름의 객체 변수로 변경되어 추가 생성된다.
# 클래스의 static 변수와 객체 변수 생성.
# 객체 2개 생성
class cLaSs2:
    
    var1 = "static var1"
    
    def __init__(self):
        self.var2 = "obj var2"
        print(f"객체 생성{self}. 객체 변수: {self.var2}. 클래스 변수:{cLaSs2.var1}")
        
        
Tclass1 = cLaSs2()
Tclass2 = cLaSs2()

# 클래스와 객체로 static 변수 참조
print("클래스로 static 참조: "+cLaSs2.var1)
print("객체1로 static 참조: "+Tclass1.var1)

# 객체로 참조하여 static 변수 값 변경
Tclass1.var1 = "obj var1"
print("객체1의 static 변경: "+Tclass1.var1)

# 값 확인
print("클래스로 static 참조: "+cLaSs2.var1)
print("객체1로 static 참조: "+Tclass1.var1)

# 클래스 변수 변경 없음. 두번째 객체로 static 변수 참조
print("클래스로 static 참조: "+cLaSs2.var1)
print("객체2로 static 참조: "+Tclass2.var1)

# 값 변경
Tclass2.var1 = "obj var1"
print("객체2의 static 변경: "+Tclass2.var1)

# 동일한 이름으로 클래스 변수, 객체 변수 생성
print("클래스로 static 참조: "+cLaSs2.var1)
print("객체1로 static 참조: "+Tclass1.var1)
print("객체2로 static 참조: "+Tclass2.var1)

0개의 댓글