Python 변수 및 메모리 관리
5474 단어 programmingpython
변수
변수는 컴퓨터 프로그램이 접근하는 메모리 위치의 한 방식을 가리킨다.C, C++, 자바 등 언어에서 변수는 메모리 위치에 대한 이름입니다.그래서 우리가 말하기를:
int x;
float y;
그것은 컴파일러가 두 변수에 메모리 공간을 만들고, 변수마다 4바이트를 만들어야 한다. (크기는 컴파일러와 프로그래밍 언어에 달려 있다.)변수는 기본적으로 메모리 위치에 분배된 이름이고 변수 유형이 정형이면 정수만 저장할 수 있다.
그러나python에서 우리는 변수를 미리 설명할 필요가 없다. 예를 들어 int x, 우리는 변수를 직접 정의하고 그것을 사용하기 시작할 수 있다. 예를 들어 x = 10.
그러면 파이톤은 변수의 종류를 어떻게 알고 접근합니까?
Python에서 모든 물건 (정수, 목록, 문자열, 함수 등) 은 하나의 대상이며, 모든 대상은 하나의 유일한 id를 가지고 있으며, 대상을 만들 때 분배된다.변수는 이러한 객체에 대한 참조(포인터)입니다.우리가 말하기를:
x = 10
int x;
float y;
x = 10
x는 정수 대상 10
우리가
y와 같은 변수x를 만들 때 내부에 무슨 일이 일어날 것 같습니까?y = x
y는 현재 x와 같은 대상을 가리킨다.
우리가 어떻게 알았지?
이 두 변수
x와 y가 가리키는 대상의 id를 검사해서 검증할 수 있습니다.id(y) == id(x)
# output
True
대상의 id도 출력할 수 있습니다print(f"id of the object pointed by x:{id(x)}")
print(f"id of the object pointed by y:{id(y)}")
# output
#your id value might be different from mine but the two ids printed must be same
id of the object pointed by x:140733799282752
id of the object pointed by y:140733799282752
지금 우리가 y에 값을 부여한다면?y = 40
이것은 40의 정수 대상을 만들 것입니다. y 이제 10이 아닌 40을 인용합니다.
어떻게 조사합니까?
마찬가지로
id()를 사용하여 객체의 ID를 봅니다.print(x) # outputs 10
print(y) # outputs 40
print(f"id of the object pointed by x:{id(x)}")
print(f"id of the object pointed by y:{id(y)}")
# output
id of the object pointed by x:140733799282752
id of the object pointed by y:140733799283712
위에서 볼 수 있듯이 이 두 ID는 현재 다르다. 이것은 40 값의 새 대상을 만들었고 y 현재 이 대상을 인용했다는 것을 의미한다.만약 우리가 변수
x에 값을 부여하고 싶다면x = "python"
print(id(x))
# output
1783541430128
우리는 대상 id를 얻을 것입니다. 이 id는 id(x) 이전에 인덱스 대상 10 을 인쇄한 id와 다르다. "140733799282752".그럼 인덱스 대상
10에게 무슨 일이 일어났나요?정수 객체 10이 현재 참조되지 않은 상태로 유지되어 더 이상 액세스할 수 없습니다.파이썬은 더 이상 접근할 수 없는 대상을 찾고 메모리를 회수해 다른 용도로 사용할 수 있는 스마트 스팸 수집 시스템을 갖추고 있다.
마지막 질문: 만약 우리가 같은 값을 가진 두 개의 정수 대상을 만들면?
p = 100
q = 100
내가 이 질문에 대답하기 전에그들의 신분증을 검사해 봅시다.print(f"id of the object pointed by x:{id(p)}")
print(f"id of the object pointed by y:{id(q)}")
# output
id of object pointed by x:140733799285632
id of object pointed by y:140733799285632
따라서python은 값이 100인 정수 대상을 만들어서 메모리 분배를 최적화하고 변수p와 q를 가리키는 것이다.한 가지 예를 더 봅시다 -
m = 350
n = 350
print(f"id of object pointed by x:{id(m)}")
print(f"id of object pointed by y:{id(n)}")
# output
id of object pointed by x:1783572881872
id of object pointed by y:1783572881936
놀랍게도 m와 n가 가리키는 정수 대상 300의 ID는 다르다.이게 어떻게 된 일입니까?
Python은 시작할 때 [-5256] 범위의 정수에 메모리를 분배합니다. 즉, 이 값에 정수 대상을 만들고 ID를 분배합니다.이 과정도 정수 캐시라고 부른다.따라서 이 범위 내에서 정수를 인용할 때마다python 변수는 대상의 캐시 값을 가리킨다.이것이 바로
p와 q가 인용한 정수 대상 100의 대상 id가 같은 id를 출력하는 이유입니다.범위 [-5256] 이외의 정수의 경우 프로그램이 실행되는 동안 정의된 객체가 작성됩니다.이것이 m와 n가 인용한 정수 대상 350의 ID가 다른 이유다.앞에서 말한 바와 같이 변수는 메모리에 저장된 대상을 가리킨다.따라서 변수는 모든 유형의 대상을 자유롭게 가리킬 수 있다.
x = 10 # x points to an object of 'int' type
x = ["python", 20, "apple"] # x now points to an object of type 'list'
x = "python" # x now points to a string type object
이로써 우리는 변수 내부 업무에 관한 단문을 끝냈다.나는 네가 그것을 즐겨 읽기를 바란다.글이나 다른 당신이 더 알고 싶은 화제에 대해 개선 제안을 하는 것을 환영합니다.나는
print 문장에서 f 문자열의 개념을 광범위하게 사용했다.자세한 내용은 this article.에서 확인할 수 있습니다.전화 좀 받아주세요.
Github ❤️
Reference
이 문제에 관하여(Python 변수 및 메모리 관리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/sweta_shaw/python-variables-and-memory-management-9bm텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)