반응형
파이썬에선 클래스 내의 변수는 일단 static 변수로 생각하면된다. 따라서 각 객체에서 접근하면 메모리 위치가 같다.
class myClass:
staticValue=0
def __init__(self,x,y):
self.x=x
self.y=y
e=myClass(10,20)
f=myClass(20,30)
print(id(e.staticValue))
print(id(f.staticValue))
4548777056
4548777056
또한 변수를 수정했을때도 반영된다. ( class.staticvalue 형태로 접근한다 )
myClass.staticValue=100
print(e.staticValue)
print(f.staticValue)
100
100
여기서 객체를 통해 staticValue를 수정하면, 그즉시 id가 달라지면서 static변수가 해당객체의 지역변수가 된다.
e.staticValue=5
print(e.staticValue)
print(f.staticValue)
print(id(e.staticValue))
print(id(f.staticValue))
5
0
4548777216
4548777056
클래스 코드 내에서도 static변수에 접근할 수 있다. (역시 class.staticvalue 형태로 접근한다)
class myclass:
staticValue=0
def __init__(self,x,y):
self.x=x
self.y=y
myclass.staticValue+=1
a=myclass(10,20)
print(myclass.staticValue,a.staticValue)
print(id(myclass.staticValue))
print(id(a.staticValue))
1 1
4548777088
4548777088
반대로 self.value로 접근하면 그 즉시 객체의 지역변수로 바뀐다.
class noStatic:
noStaticValue=0
def __init__(self,x,y):
self.x=x
self.y=y
self.noStaticValue+=1
d=noStatic(10,20)
print(noStatic.noStaticValue,d.noStaticValue)
print(id(noStatic.noStaticValue))
print(id(d.noStaticValue))
0 1
4548777056
4548777088
반응형