티스토리 뷰
다른 언어를 사용하다 파이썬을 사용하면 정말 적응하기 힘든 것 같다.
오늘 크게 충격 받은 것은 l-value와 r-value의 개념 자체가 다른 것 같다....
일단, 파이썬의 모든 값은 자신만의 공간이 있다. 이는 id함수를 통해 확인이 가능하다. (그냥 코드만 보자면, 우리가 아는 l-value가 포인터라고 생각하면 좀더 편하게 생각할 수 있다..... 절대 진짜 포인터라는 것은 아니다.)
3 #140724586779496
a = 3
b = 3
print(id(3)) #140724586779496
print(id(a)) #140724586779496
print(id(b)) #140724586779496
위 코드를 통해 '3'이라는 값 자체도 id를 가지고 '3'을 받는 'a'와 'b' 모두 3을 할당 받으면 둘다 '3'과 같은 id를 가진다.
이게 이해가 된다면, 잠깐 이런 생각을 할 수있다.
"그럼 서로 다른 클래스가 같은 값을 가진다면 문제가 되지 않나?"
문제 되지 않는다.
같은 클래스에 무슨 연산을 쳐하든 해당 연산 결과로 나온 값이 있는 id 위치로 변수들이 이동한다.
값이 이동하는게 아니다.
Class A와 Class B의 p라는 값이 모두 1이라는 값을 가진다.
Class B의 p를 2더하면, Class B의 p가 가진 값이 변하지 않고 p가 가리키는 값이 변경된다.
class Dog:
count = 0 # 클래스 속성
def __init__(self):
Dog.count += 1 # 전역 변수 count에 1을 더함
@classmethod
def printClass(cls):
return (cls.count) #
@classmethod
def print_count(cls,point):
cls.count+=point
print('{0}명 생성되었습니다.'.format(cls.count)) # cls로 클래스 속성에 접근
return cls.count
class Person:
count = 0 # 클래스 속성
def __init__(self):
Person.count += 1 # 전역 변수 count에 1을 더함
def printIns(self):
return (self.count)
@classmethod
def printClass(cls):
return (cls.count) #
@classmethod
def print_count(cls,point):
cls.count+=point
print('{0}명 생성되었습니다.'.format(cls.count)) # cls로 클래스 속성에 접근
return cls.count
doggo = Dog()
doggo.print_count(3)
print('Doggo : ',doggo.count)
print(id(4))
print(id(doggo.print_count(0)))
print(id(5))
print(id(doggo.print_count(1)))
doggoSnack = 5
print("Doggo Snack : ",id(doggoSnack))
print("\n")
james = Person()
print('James : ',james.count)
maria = Person()
print('Maria : ',maria.count)
maria.count+=1
print('James : ',james.count)
print('Maria : ',maria.count)
print("\n")
james.print_count(2) # 2명 생성되었습니다.
print('James printIns : ',james.printIns())
print('Maria printIns : ',maria.printIns())
print('James printClass : ',james.printClass())
print('Maria printClass : ',maria.printClass())
print("\n")
print("4 : ",id(4))
print("P : ",id(Person.print_count(0)))
print("J : ",id(james.print_count(0)))
print("M : ",id(maria.print_count(0)))
4명 생성되었습니다.
Doggo : 4
4명 생성되었습니다.
140724586779528
Doggo Snack : 140724586779560
James : 1
Maria : 2
James : 2
Maria : 3
4명 생성되었습니다.
James printIns : 4
Maria printIns : 3
James printClass : 4
Maria printClass : 4
4 : 140724586779528
4명 생성되었습니다.
P : 140724586779528
4명 생성되었습니다.
J : 140724586779528
4명 생성되었습니다.
M : 140724586779528
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- const
- 메모리
- 인터럽트
- 함수
- static_cast
- c++
- 할당
- 운영체제
- New
- 입출력
- thread
- 알고리즘
- 컴파일
- 구조
- CPU
- 멀티스레드
- 백준
- 명령어
- 포인터
- 크기
- 게임수학
- dynamic_cast
- 스레드
- 클래스
- 수학
- 프로세스
- 상속
- 초기화
- malloc
- 레지스터
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함