Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

A +=B Python의 할당 수수께끼

<시간/>

이 장에서는 실제로 변경할 수 없는 튜플의 값을 업데이트할 때 어떤 일이 발생하는지 봅니다. 새 값을 이전 값과 병합할 수 있지만 오류가 발생합니다. 오류의 바이트 코드를 연구하고 튜플 규칙이 작동하는 방식을 더 잘 이해할 수 있습니다.

먼저 튜플을 정의한 다음 아래와 같이 마지막 요소를 업데이트하는 명령을 실행합니다.

예시

>>> 튜플 =(5,7,9,[1,4])>>> 튜플[3] +=[6,8]

출력

위의 코드를 실행하면 다음과 같은 결과가 나옵니다. -

Traceback(가장 최근 호출 마지막):File "", line 1, inTypeError:'tuple' 개체는 항목 할당을 지원하지 않습니다.>>> tupl(5, 7, 9, [1, 4, 6, 8]) 

이제 위의 접근 방식의 바이트 코드를 연구하기 위해 코드를 함수에 넣고 dis 메서드를 적용하여 바이트 코드를 표시합니다. 동일한 오류가 발생하지만 자세한 내용이 있습니다.

예시

def immut_function():tupl =(5,7,9,[1,4]) tupl[3] +=[6,8]immut_function()

출력

위의 코드를 실행하면 다음과 같은 결과가 나옵니다. -

TypeError Traceback (가장 최근 호출 마지막) in () 2 tupl =(5,7,9,[1,4]) 3 tupl[3] +=[6,8]----> 4 immut_function( )in immut_function() 1 def immut_function():2 tupl =(5,7,9,[1,4])----> 3 tupl[3] +=[6,8]4 immut_function()TypeError:'tuple' 개체는 항목 할당을 지원하지 않습니다.

다음으로 위 함수의 바이트 코드를 표시하여 튜플 할당 및 오류의 세부 정보를 확인합니다.

예시

disdis.dis(immut_function) 가져오기

출력

위의 코드를 실행하면 다음과 같은 결과가 나옵니다. -

2 0 LOAD_CONST 1 (5) 3 LOAD_CONST 2 (7) 6 LOAD_CONST 3 (9) 9 LOAD_CONST 4 (1) 12 LOAD_CONST 5 (4) 15 BUILD_LIST 2 18 BUILD_TUPLE 4 21 STORE_FAST 0 (tupl)FAST 0 (tupl) 27 LOAD_CONST 6 (3) 30 DUP_TOPX 2 33 BINARY_SUBSCR 34 LOAD_CONST 7 (6) 37 LOAD_CONST 8 (8) 40 BUILD_LIST 2 43 INPLACE_ADD 44 ROT_THREE 45 STORE_SUB 

결론은 가변 요소를 튜플에 넣지 않는다는 것입니다. 할당이 가능하지만 예외가 발생합니다. 값이 46인 단계에서 볼 수 있듯이 튜플은 변경할 수 없는 개체이므로 할당이 실패합니다.