Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

पायथन में कॉपी: शैलो vs डीप कॉपी

पायथन में असाइनमेंट (=) ऑब्जेक्ट कॉपी नहीं करता, केवल रेफरेंस बनाता है। वास्तविक कॉपी के लिए copy मॉड्यूल उपयोग करें।

असाइनमेंट vs कॉपी

L1 = [1, 2, 3]
L2 = L1          # असाइनमेंट: समान ऑब्जेक्ट
print(id(L1), id(L2))  # समान ID

L2[1] = 100
print(L1, L2)    # [1, 100, 3] [1, 100, 3] - दोनों बदले!

copy मॉड्यूल

  • copy.copy(): शैलो कॉपी - नया ऑब्जेक्ट, लेकिन नेस्टेड ऑब्जेक्ट्स के रेफरेंस कॉपी करता है।
  • copy.deepcopy(): डीप कॉपी - नया ऑब्जेक्ट, नेस्टेड ऑब्जेक्ट्स को रिकर्सिवली कॉपी करता है।

शैलो कॉपी

import copy

L1 = [[1, 2, 3], [4, 5, 6]]
L2 = copy.copy(L1)

print(L1, L2)  # दोनों [[1,2,3], [4,5,6]]

# टॉप-लेवल जोड़ना: केवल L2 प्रभावित
L2.append([10, 10, 10])
print(L1)  # [[1,2,3], [4,5,6]]
print(L2)  # [[1,2,3], [4,5,6], [10,10,10]]

# नेस्टेड मॉडिफिकेशन: दोनों प्रभावित!
L2[1][0] = 100
print(L1)  # [[1,2,3], [100,5,6]]  <-- बदला!
print(L2)  # [[1,2,3], [100,5,6]]

डीप कॉपी

L1 = [[1, 2, 3], [4, 5, 6]]
L2 = copy.deepcopy(L1)

L2[1][0] = 100
print(L1)  # [[1,2,3], [4,5,6]]  <-- अपरिवर्तित
print(L2)  # [[1,2,3], [100,5,6]]

तुलना तालिका

ऑपरेशननया ऑब्जेक्ट?नेस्टेड ऑब्जेक्ट्सउपयोग केस
असाइनमेंट (=)नहींसाझाअलियासिंग
शैलो कॉपीहाँ (टॉप-लेवल)साझा (रेफरेंस)फ्लैट स्ट्रक्चर्स, परफॉरमेंस
डीप कॉपीहाँ (रिकर्सिव)कॉपी (स्वतंत्र)नेस्टेड स्ट्रक्चर्स, पूर्ण आइसोलेशन

कब क्या उपयोग करें?

  • शैलो कॉपी: जब नेस्टेड ऑब्जेक्ट्स इम्यूटेबल हों (टपल्स, स्ट्रिंग्स, नंबर्स) या आप शेयर्ड स्टेट चाहते हों।
  • डीप कॉपी: जब नेस्टेड म्यूटेबल ऑब्जेक्ट्स हों और पूर्ण स्वतंत्रता चाहिए।
  • कस्टम ऑब्जेक्ट्स: __copy__() और __deepcopy__() मेथड्स परिभाषित करके व्यवहार नियंत्रित करें।

कस्टम क्लास उदाहरण

import copy

class MyClass:
    def __init__(self, value):
        self.value = value

    def __copy__(self):
        print("__copy__ called")
        return MyClass(self.value)

    def __deepcopy__(self, memo):
        print("__deepcopy__ called")
        return MyClass(copy.deepcopy(self.value, memo))

obj = MyClass([1, 2, 3])
obj2 = copy.copy(obj)      # __copy__ called
obj3 = copy.deepcopy(obj)  # __deepcopy__ called
  1. - C# में शैलो कॉपी और डीप कॉपी में क्या अंतर है?

    शैलो कॉपी (Shallow Copy) ऑब्जेक्ट की शैलो कॉपी मुख्य ऑब्जेक्ट को कॉपी करती है, लेकिन इनर ऑब्जेक्ट्स को कॉपी नहीं करती। इनर ऑब्जेक्ट्स मूल ऑब्जेक्ट और उसकी कॉपी के बीच शेयर किए जाते हैं दोनों ऑब्जेक्ट्स स्वतंत्र नहीं होते यदि एक ऑब्जेक्ट में संशोधन किया जाए, तो परिवर्तन दूसरे में भी प्रतिबिंबित होत

  1. - जावा में डीप कॉपी और शैलो कॉपी

    डीप कॉपी और शैलो कॉपी दोनों दिए गए ऑब्जेक्ट की कॉपी बनाने के अलग-अलग तरीकों को संदर्भित करते हैं। शैलो कॉपी यह मूल रूप से ऑब्जेक्ट का एक नया इंस्टेंस बनाता है और मूल डेटा सेट से सभी डेटा को नव निर्मित इंस्टेंस में कॉपी करता है। इसका मतलब है कि नव निर्मित इंस्टेंस को मूल ऑब्जेक्ट में विशेष रूप से का

  1. Python और Tkinter का उपयोग करके क्लिपबोर्ड से कॉपी करें Python और Tkinter का उपयोग करके क्लिपबोर्ड से कॉपी करें

    क्लिपबोर्ड से कॉपी करने के लिए, हम Tkinter के clipboard_get() मेथड का उपयोग कर सकते हैं। आइए एक उदाहरण लेते हैं और देखते हैं कि क्लिपबोर्ड से डेटा कैसे प्राप्त करें और इसे Tkinter विंडो पर प्रदर्शित करें।चरणTkinter लाइब्रेरी इम्पोर्ट करें और Tkinter फ्रेम का एक इंस्टेंस बनाएं।geometry मेथड का उपयोग