Jak powinienem zrozumieć wyjście dis.dis?

Chciałbym zrozumieć, jak korzystaćdis (dissembler kodu Pythona). W szczególności, jak należy interpretować dane wyjściowedis.dis (lubdis.disassemble)?

.

Oto bardzo konkretny przykład (w Pythonie 2.7.3):

dis.dis("heapq.nsmallest(d,3)")

      0 BUILD_SET             24933
      3 JUMP_IF_TRUE_OR_POP   11889
      6 JUMP_FORWARD          28019 (to 28028)
      9 STORE_GLOBAL          27756 (27756)
     12 LOAD_NAME             29811 (29811)
     15 STORE_SLICE+0  
     16 LOAD_CONST            13100 (13100)
     19 STORE_SLICE+1

Widzę toJUMP_IF_TRUE_OR_POP itp. są instrukcjami kodu bajtowego(choć co ciekawe,BUILD_SET nie pojawia się na tej liście, chociaż oczekuję, że działa takBUILD_TUPLE). Myślę, że liczby po prawej stronie to alokacje pamięci, a liczby po lewejiść do liczby ... Zauważam ichprawie przyrost o 3 za każdym razem (ale nie do końca).

Jeśli zawijamdis.dis("heapq.nsmallest(d,3)") wewnątrz funkcji:

def f_heapq_nsmallest(d,n):
    return heapq.nsmallest(d,n)

dis.dis("f_heapq(d,3)")

      0 BUILD_TUPLE            26719
      3 LOAD_NAME              28769 (28769)
      6 JUMP_ABSOLUTE          25640
      9 <44>                                      # what is <44> ?  
     10 DELETE_SLICE+1 
     11 STORE_SLICE+1 

questionAnswers(2)

yourAnswerToTheQuestion