दिलचस्प पोस्ट
PHP अपलोड, निकालें और प्रगति पट्टी पता करें कि क्रोम कंसोल खुला है या नहीं किसी बॉर्डर के बिना किसी फ़ॉर्म को कैसे ले जाना और उसका आकार बदलना है? मैं बैच फ़ाइलों में एम्पर्संस से कैसे बच सकता हूँ? स्ट्रिंग की लंबाई प्राप्त करें बूट समय पर एंड्रॉइड -स्टार्टिंग सेवा आईओएस में दृश्य पदानुक्रम का मैं कैसे निरीक्षण कर सकता हूं? कैसे प्रतिक्रिया से बचें। अंत () "धागा रद्द किया जा रहा था" एक्सेल फ़ाइल डाउनलोड के दौरान अपवाद jQuery चयनकर्ता मूल्य से बचने Google मानचित्र एपीआई v2 वर्ग नहीं मिला उत्तरदायी सीएसएस सर्किल आखिर क्यों नहीं होता है () अंत कभी नहीं? 'ज़ोरदार' जावास्क्रिप्ट चर लिनक्स कर्नल कोड में __इनिट का क्या मतलब है? क्या एक प्रगति पट्टी का इस्तेमाल मुख्य कक्षा के बाहर किया जा सकता है?

मैं अजगर में वस्तु की एक प्रति कैसे बना सकता हूं?

मैं किसी ऑब्जेक्ट की प्रतिलिपि बनाना चाहता हूं। मैं चाहता हूं कि नई ऑब्जेक्ट को पुराने ऑब्जेक्ट (फ़ील्ड के मान) के सभी गुणों के पास होना चाहिए। लेकिन मुझे स्वतंत्र वस्तुओं रखना है इसलिए, अगर मैं नए ऑब्जेक्ट के फ़ील्ड्स के मूल्यों को बदलता हूं, तो पुराने ऑब्जेक्ट को उस पर असर नहीं होना चाहिए।

वेब के समाधान से एकत्रित समाधान "मैं अजगर में वस्तु की एक प्रति कैसे बना सकता हूं?"

copy.deepcopy() फ़ंक्शन पर एक नज़र डालें यह ठीक उसी तरह करना चाहिए जो आपको चाहिए। एक अच्छा सवाल के लिए एक संबंधित प्रश्न के उत्तर भी देखें

मैं अजगर में वस्तु की एक प्रति कैसे बना सकता हूं?

इसलिए, अगर मैं नए ऑब्जेक्ट के फ़ील्ड्स के मूल्यों को बदलता हूं, तो पुराने ऑब्जेक्ट को उस पर असर नहीं होना चाहिए।

तुम्हारा मतलब है एक अस्थायी वस्तु फिर

पायथन 3 में, सूचियों को copy विधि प्राप्त होती है (2 में, आप प्रति बनाने के लिए एक टुकड़ा का उपयोग करते हैं):

 >>> a_list = list('abc') >>> a_copy_of_a_list = a_list.copy() >>> a_copy_of_a_list is a_list False >>> a_copy_of_a_list == a_list True 

उथले प्रतियां

उथले प्रतियां केवल बाहरी कंटेनर की प्रतियां हैं

list.copy एक उथले प्रति है:

 >>> list_of_dict_of_set = [{'foo': set('abc')} ... ] >>> list_of_dict_of_set = [{'foo': set('abc')}] >>> lodos_copy = list_of_dict_of_set.copy() >>> lodos_copy[0]['foo'].pop() 'c' >>> lodos_copy [{'foo': {'b', 'a'}}] >>> list_of_dict_of_set [{'foo': {'b', 'a'}}] 

आपको आंतरिक वस्तुओं की एक प्रति प्राप्त नहीं होती है वे वही वस्तुएं हैं – इसलिए जब वे उत्परिवर्तित होते हैं, तो परिवर्तन दोनों कंटेनरों में दिखाई देता है

गहरी प्रतियां

गहरी प्रतियां प्रत्येक आंतरिक वस्तु की पुनरावर्ती प्रतियां हैं।

 >>> lodos_deep_copy = copy.deepcopy(list_of_dict_of_set) >>> lodos_deep_copy[0]['foo'].add('c') >>> lodos_deep_copy [{'foo': {'c', 'b', 'a'}}] >>> list_of_dict_of_set [{'foo': {'b', 'a'}}] 

परिवर्तन मूल में केवल प्रतिलिपि में प्रतिबिंबित नहीं होते हैं

अपरिवर्तनीय वस्तुओं

अपरिवर्तनीय वस्तुओं को आमतौर पर कॉपी करने की आवश्यकता नहीं होती है वास्तव में, यदि आप कोशिश करते हैं, तो पायथन आपको केवल मूल वस्तु देगा:

 >>> a_tuple = tuple('abc') >>> tuple_copy_attempt = a_tuple.copy() Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'tuple' object has no attribute 'copy' 

ट्यूपल्स के पास एक कॉपी विधि भी नहीं है, तो इसे एक टुकड़ा के साथ आज़माएं:

 >>> tuple_copy_attempt = a_tuple[:] 

लेकिन हम देखते हैं कि यह एक ही वस्तु है:

 >>> tuple_copy_attempt is a_tuple True 

इसी प्रकार तार के लिए:

 >>> s = 'abc' >>> s0 = s[:] >>> s == s0 True >>> s is s0 True 

और फ्रॉजेन्ससेट के लिए, भले ही उनके पास एक copy विधि है:

 >>> a_frozenset = frozenset('abc') >>> frozenset_copy_attempt = a_frozenset.copy() >>> frozenset_copy_attempt is a_frozenset True 

अपरिवर्तनीय वस्तुओं की प्रतिलिपि कब करें

अपरिवर्तनीय वस्तुओं की नकल की जानी चाहिए, यदि आपको एक अस्थायी आंतरिक ऑब्जेक्ट की प्रतिलिपि की आवश्यकता है।

 >>> tuple_of_list = [], >>> copy_of_tuple_of_list = tuple_of_list[:] >>> copy_of_tuple_of_list[0].append('a') >>> copy_of_tuple_of_list (['a'],) >>> tuple_of_list (['a'],) >>> deepcopy_of_tuple_of_list = copy.deepcopy(tuple_of_list) >>> deepcopy_of_tuple_of_list[0].append('b') >>> deepcopy_of_tuple_of_list (['a', 'b'],) >>> tuple_of_list (['a'],) 

जैसा कि हम देख सकते हैं, जब प्रतिलिपि का आंतरिक उद्देश्य उत्परिवर्तित होता है, तो मूल परिवर्तन नहीं होता है।