जवाबों:
सभी तीन संस्करण अलग-अलग काम करते हैं:
B = A
यह B
पहले से मौजूद मौजूदा ऑब्जेक्ट के लिए एक नया नाम बांधता है A
। बाद में वे एक ही वस्तु को संदर्भित करते हैं, इसलिए यदि आप एक को संशोधित करते हैं, तो आप दूसरे के माध्यम से भी बदलाव देखेंगे।
B[:] = A
(उसी के रूप में B[:]=A[:]
?)
यह A
मौजूदा सरणी में मानों की प्रतिलिपि बनाता है B
। इस कार्य के लिए दो सरणियों का आकार समान होना चाहिए। B[:] = A[:]
एक ही काम करता है (लेकिन B = A[:]
1 की तरह कुछ और करना होगा)।
numpy.copy(B, A)
यह कानूनी वाक्यविन्यास नहीं है। आप शायद मतलब था B = numpy.copy(A)
। यह लगभग 2 के समान है, लेकिन यह सरणी का पुन: उपयोग करने के बजाय एक नया सरणी बनाता है B
। यदि पिछले B
मान का कोई अन्य संदर्भ नहीं था , तो अंतिम परिणाम 2 के समान होगा, लेकिन यह कॉपी के दौरान अस्थायी रूप से अधिक मेमोरी का उपयोग करेगा।
या शायद आपका मतलब था numpy.copyto(B, A)
, जो कानूनी है, और 2 के बराबर है?
but B = A[:] would do something more like 1
? इसके अनुसार stackoverflow.com/a/2612815 new_list = old_list[:]
एक प्रति भी है।
some_array[:]
से एक नई सरणी ऑब्जेक्ट बन जाएगी, लेकिन उस नए ऑब्जेक्ट में मूल सरणी के समान मेमोरी का दृश्य होगा, जिसे कॉपी नहीं किया गया होगा। इसलिए मैंने कहा कि यह अधिक पसंद है B = A
। यह केवल O(1)
स्थान और समय लेता है , बजाय O(n)
प्रत्येक की एक वास्तविक प्रति की आवश्यकता होगी।
B=A
एक संदर्भ बनाता हैB[:]=A
एक प्रति बनाता हैnumpy.copy(B,A)
एक प्रति बनाता हैअंतिम दो को अतिरिक्त मेमोरी की आवश्यकता है।
एक गहरी प्रतिलिपि बनाने के लिए आपको उपयोग करने की आवश्यकता है B = copy.deepcopy(A)
B[:] = A
करता है नहीं वस्तु प्रकार, जैसे की सरणियों की गहरी प्रतिलिपि बनाने के A = np.array([[1,2,3],[4,5]]); B = np.array([None,None], dtype='O')
। अब कोशिश करो B[:] = A; B[0][0]=99
, यह ए और बी दोनों में पहले तत्व को बदल देगा ! मेरी जानकारी के लिए, एक गहरी प्रतिलिपि की गारंटी देने का कोई और तरीका नहीं है, यहां तक कि एक सुन्न-सरणी की तुलना में,copy.deepcopy