पायथन में असाइनमेंट किसी ऑब्जेक्ट को जगह में संशोधित नहीं करता है। यह एक नाम rebinds ताकि input = new_val
के बाद, स्थानीय चर input
एक नया मूल्य प्राप्त हो जाता है।
def foo(input, new_val):
input[0] = new_val
foo([input])
अजगर पास-संदर्भ द्वारा करते नहीं करता है:
आप "बाहर" input
को संशोधित करना चाहते हैं, तो आप इस तरह के एक एक तत्व सूची के रूप में एक अस्थायी ऑब्जेक्ट के अंदर लपेट करना होगा वास्तव में जिस तरह से सी ++ संदर्भ गुजरता है काम करता है। कम से कम इस मामले में, यह अधिक है के रूप में अगर हर तर्क C/C++ में एक सूचक है:
// effectively a no-op!
void foo(object *input, object *new_val)
{
input = new_val;
}
स्रोत
2011-11-18 14:51:22
आप फ़ंक्शन foo की परिभाषा में स्थानीय चर "इनपुट" को कॉल करके स्वयं को भ्रमित कर सकते हैं। इसके अलावा, उत्तर में क्या स्वेन ने कहा। – phkahler
जहां भी आपने पढ़ा है कि पाइथन संदर्भ से सबकुछ पास करता है, वे गलत थे। –