shallow copy एक नया बाहरी container बनाती है जिसके elements वही पुराने ऑब्जेक्ट होते हैं, इसलिए अंदर की लिस्ट बदलने पर वह दोनों जगह दिखता है। deep copy सब कुछ recursively कॉपी करती है और आपको पूरी तरह अलग स्ट्रक्चर देती है। deep copies समय और मेमोरी खाती हैं और sockets या file handles रखने वाले ऑब्जेक्ट पर टूट सकती हैं, इसलिए उन्हें तभी लें जब nesting सच में साझा हो।
इंटरव्यूअर यह क्यों पूछते हैं
इंटरव्यूअर नामों बनाम ऑब्जेक्ट वाले आपके मॉडल को परख रहा है। जो variables को वैल्यू रखने वाले डिब्बे मानता है वह यह गलत करेगा, और वही उलझन ऐसे सूक्ष्म बग पैदा करती है जहां एक consumer config template बदल देता है और बाद के सारे consumers को वही बदलाव मिलता है। deep copy की कीमत और custom control के लिए dunder deepcopy का जिक्र दिखाता है कि आपने यह फैसला असली दबाव में लिया है।
अपना जवाब कैसे स्ट्रक्चर करें
- नया container बनाम नई अंदरूनी चीजें, यह फर्क बताएं।
- nested बदलाव का एक उदाहरण दें।
- deep copying की कीमत बताएं।
- कहें कि आप दोनों में से चुनते कैसे हैं।
उदाहरण जवाब
shallow का मतलब है आपको नया बाहरी ऑब्जेक्ट मिलता है जो बिल्कुल उन्हीं अंदरूनी ऑब्जेक्ट के references रखता है। लिस्टों की लिस्ट को slice करने पर नई लिस्ट मिलती है, लेकिन element zero में append करने से मूल भी बदल जाती है, क्योंकि दोनों लिस्ट उसी अंदरूनी लिस्ट की तरफ इशारा करती हैं। deep copy पूरे ग्राफ पर चलती है और हर स्तर दोबारा बनाती है, और जिन ऑब्जेक्ट को देख चुकी है उन्हें याद रखती है ताकि cycles से stack न फटे। मेरा डिफॉल्ट shallow है क्योंकि वह सस्ता है, और deepcopy की तरफ तभी जाता हूं जब पता हो कि nested स्ट्रक्चर को अलग अलग बदला जाएगा। एक बार हमारे यहां बग आया था जहां default settings dictionary सिर्फ ऊपरी स्तर पर कॉपी हुई, और अंदर की retry policy एक client ने बदल दी जो उसी वर्कर के बाकी सारे clients पर लग गई। दूसरी बताने लायक बात यह है कि deepcopy मुफ्त नहीं है और हमेशा सुरक्षित भी नहीं। डेटाबेस connection या file handle लपेटने वाली किसी भी चीज को custom dunder deepcopy चाहिए, वरना वह फेल होगी या ऐसी चीज की नकल बना देगी जिसकी नहीं बननी चाहिए।
जल्दी ही यह इंटरव्यू देने जा रहे हैं? GhostPilot आपकी लाइव कॉल सुनता है, सवाल पूछे जाते ही उसे पकड़ लेता है, और रियल-टाइम में एक स्ट्रक्चर्ड जवाब आपकी स्क्रीन पर डाल देता है। अगले मॉक में इसे आजमाएं, या ले लें एक $29 Session Pass, कोई सब्सक्रिप्शन नहीं, असली इंटरव्यू के लिए।
देखें यह कैसे काम करता हैफॉलो-अप सवाल जिनकी उम्मीद रखें
- deepcopy circular references कैसे संभालती है?
- आप कैसे जांचेंगे कि दो नाम एक ही ऑब्जेक्ट की तरफ इशारा कर रहे हैं?
- इसकी जगह ऑब्जेक्ट को immutable बनाना कब बेहतर होगा?
Python डेवलपर के और सवाल
आपका इंटरव्यूअर इसका अपना वर्ज़न पूछेगा। फ्री Question Predictor में अपना असली जॉब डिस्क्रिप्शन पेस्ट कीजिए और वो 20 सवाल पाइए जो उस रोल में सबसे ज्यादा पूछे जाने की संभावना है, साथ में यह भी कि हर सवाल असल में क्या टटोल रहा है।
मेरे सवाल प्रेडिक्ट करें