python 은 두 변수 값 을 교환 하 는 n 가지 조작 을 실현 합 니 다.

python 두 변수 값 교환
방법 1:

c = 0
c= a
a= b
b= c
방법 2:

a,b = b,a 
python 의 기본 방법 입 니 다.
방법 3:(두 변수 로 만 구현)

a = a+b
b = a-b
a = a-b
python 두 수치 교환(a,b=b,a 원리 분석)
python 교환 두 가지 가치 있 는 방법 은 매우 간단 합 니 다.즉,a,b=b,a 입 니 다.한 단계 조작 으로 두 개의 값 을 교환 하 였 습 니 다.그러면 이것 은 왜 일 까요?
진실:
Python 의 변 수 는 값 을 직접 저장 하지 않 고 메모리 주 소 를 참조 하 며 변 수 를 교환 할 때 인 용 된 주소 만 교환 합 니 다.
다음 절 차 를 먼저 보 세 요.

import dis

def func(a,b):
    a,b=b,a
    print(a,b)
    
a=10
b=20
func(a,b)
dis.dis(func)
일반적으로 하나의 Python 문 구 는 몇 개의 바이트 코드 명령 에 대응 합 니 다.Python 의 바이트 코드 는 어 셈 블 리 명령 과 유사 한 중간 언어 입 니 다.그러나 하나의 바이트 코드 명령 은 하나의 기계 명령(바 이 너 리 명령)에 대응 하 는 것 이 아니 라 C 코드 에 대응 하 는 것 입 니 다.서로 다른 명령 의 성능 이 다 르 기 때문에 명령 수량 을 통 해 코드 의 성능 을 판단 할 수 없습니다.비교적 잦 은 명령 을 호출 하 는 코드 를 통 해 프로그램의 성능 을 확인 해 야 한다.
하나의 Python 프로그램 은 몇 개의 코드 블록 으로 구성 되 어 있 습 니 다.예 를 들 어 하나의 Python 파일 은 하나의 코드 블록,하나의 클래스,하나의 함수 가 하나의 코드 블록 이 고 하나의 코드 블록 은 실행 되 는 문맥 환경 과 일련의 바이트 코드 명령 에 대응 합 니 다.
dis 의 역할
dis 모듈 은 주로 바이트 코드 를 분석 하 는 내장 모듈 로 자주 사용 되 는 방법 은 dis.dis([by tesource])이 고 매개 변 수 는 코드 블록 으로 이 코드 블록 에 대응 하 는 바이트 코드 명령 서열 을 얻 을 수 있 습 니 다.
코드 출력 결과
这里写图片描述
그 중에서 앞 에 12 인 결과 만 보면 됩 니 다.
주로 ROT 임 을 알 수 있 습 니 다.TWO 명령 의 공로:
python 문 서 를 보면 ROT 가 있 음 을 알 수 있 습 니 다.TWO(원본 1398 줄),ROTTHREE(원본 1406 줄),ROTFOUR 라 는 명령 은 직접
두 변수,세 변수,네 변수의 값 을 교환 합 니 다.
python 3.4 의 원본 코드 에서 ceval.c 파일 을 찾 아 보면 다음 과 같 습 니 다.

TARGET(ROT_TWO) {           
    PyObject *top = TOP();          
    PyObject *second = SECOND();       
    SET_TOP(second);          
    SET_SECOND(top);         
    FAST_DISPATCH();       
}        
TARGET(ROT_THREE) {            
	PyObject *top = TOP();            
	PyObject *third = THIRD();            
	SET_SECOND(third);            
	FAST_DISPATCH();        
}
첨부:python 값 교환
변수의 모든 초기 화 는 새로운 공간 을 열 어 새로운 내용 의 주 소 를 변수 에 할당 합 니 다.다음 그림 에서 우리 가 반복 하 는 str1 에 값 을 부여 합 니 다.사실은 메모리 에서 의 변 화 는 그림 과 같 습 니 다.
这里写图片描述
위의 그림 에서 알 수 있 듯 이 str 1 은 중복 초기 화 과정 에서 str 1 에 저 장 된 요소 주소 가'hello World'의 주소 에서'new hello World'로 바 뀌 었 기 때문이다.
복잡 한 데이터 형식 에 있어 내부 의 값 이 변수 에 미 치 는 영향 을 바 꿉 니 다.
这里写图片描述
这里写图片描述
목록 에 있 는 요 소 를 추가 삭제 하고 수정 할 때 lst 1 목록 자체 가 전체 목록 주소 에 영향 을 주지 않 고 내부 요소 의 주소 참조 만 변경 합 니 다.
그러나 목록 을 다시 초기 화(할당)할 때 lst 1 이라는 변수 에 주 소 를 다시 부여 하고 원래 목록 의 주 소 를 덮어 씁 니 다.이때 lst 1 목록 의 메모리 id 가 바 뀌 었 습 니 다.위의 이 이 치 는 모든 복잡 한 데이터 형식 에 사용 되 는 것 이 똑같다.
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기