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.)