2011-12-21 13 views
17

सरल और संक्षिप्त प्रश्न। पायथन में दो चरों को स्वैप करना बहुत आसान है: a, b = b, a। यह ठीक है, मुझे कोई आपत्ति नहीं है :) लेकिन मुझे दिलचस्पी है कि यह आंतरिक रूप से कैसे काम करता है? क्या यह स्वयं द्वारा कुछ अस्थायी चर बनाता है या यह कुछ और दिलचस्प है (मैं शर्त लगाता हूं)?वैरिएबल स्वैपिंग आंतरिक रूप से कैसे काम करता है?

उत्तर

31

पायथन स्रोत कोड इसे निष्पादित करने से पहले bytecode में परिवर्तित कर दिया गया है। आप देख सकते हैं कि स्वैप disassembler dis का उपयोग करके आंतरिक रूप से काम करता है बाईटकोड कैसा दिखता है देखने के लिए:

import dis 
>>> def f(a,b): a, b = b, a 
>>> dis.dis(f) 
    1   0 LOAD_FAST    1 (b) 
       3 LOAD_FAST    0 (a) 
       6 ROT_TWO    
       7 STORE_FAST    0 (a) 
      10 STORE_FAST    1 (b) 
      13 LOAD_CONST    0 (None) 
      16 RETURN_VALUE 

सरल शब्दों में, यह स्टैक पर ए और बी के मूल्यों धक्का, घूमता है (स्वैप) शीर्ष दो तत्व, फिर मूल्यों को फिर से पॉप करता है।

यह भी देखें:

+0

बहुत बढ़िया! तो चाल ROT_TWO है ... बहुत बहुत धन्यवाद! –

संबंधित मुद्दे