ऐसा इसलिए होता है क्योंकि पायथन में वर्णनात्मक कोड निष्पादित करके प्रदर्शन किया जाता है।
अगर एक ने कहा
def f(x = {}):
....
यह बहुत स्पष्ट होगा कि आप हर बार एक नई सरणी चाहते थे।
लेकिन अगर मैं कहूं तो:
list_of_all = {}
def create(stuff, x = list_of_all):
...
यहां मुझे लगता है कि मैं विभिन्न सूचियों में सामान बनाना चाहता हूं, और एक वैश्विक पकड़-सभी है जब मैं एक सूची निर्दिष्ट नहीं करता हूं।
लेकिन कंपाइलर इसका अनुमान कैसे लगाएगा? तो कोशिश क्यों? हम इस पर भरोसा कर सकते थे कि यह नाम दिया गया था या नहीं, और यह कभी-कभी मदद कर सकता है, लेकिन वास्तव में यह सिर्फ अनुमान होगा। इसी समय, एक अच्छा कारण है कि कोशिश न करना - स्थिरता।
जैसा कि है, पायथन सिर्फ कोड निष्पादित करता है। चर list_of_all को पहले से ही एक ऑब्जेक्ट सौंपा गया है, ताकि ऑब्जेक्ट को कोड में संदर्भ द्वारा पारित किया जाए जो x को उसी तरह से डिफॉल्ट करता है जिससे किसी फ़ंक्शन को कॉल करने पर यहां नामित स्थानीय ऑब्जेक्ट का संदर्भ मिलेगा।
यदि हम नामांकित मामले से अनाम को अलग करना चाहते हैं, तो यह कोड को चलाने के समय में निष्पादित किए जाने की तुलना में काफी अलग तरीके से संकलन निष्पादन कार्य में शामिल करेगा। इसलिए हम विशेष मामला नहीं बनाते हैं।