2012-07-02 32 views
11
a=[1,2,3] 
b=[4,5,6] 
c=[] 
d=[] 

के बीच क्या अंतर है इन दो कथनों के बीच क्या अंतर है?एक [:] = बी और ए = बी [:]

c[:]=a 
d=b[:] 

लेकिन दोनों एक ही परिणाम देते हैं।

सी है [1,2,3] और घ [4,5,6]

है और वहाँ कोई अंतर कार्यक्षमता बुद्धिमान है?

उत्तर

29

c[:] = a यह एक

>>> l = [1,2,3,4,5] 
>>> l[::2] = [0, 0, 0] #you can also replace only particular elements using this 
>>> l 
[0, 2, 0, 4, 0] 

>>> k = [1,2,3,4,5] 
>>> g = ['a','b','c','d'] 
>>> g[:2] = k[:2] # only replace first 2 elements 
>>> g 
[1, 2, 'c', 'd'] 

>>> a = [[1,2,3],[4,5,6],[7,8,9]] 
>>> c[:] = a  #creates a shallow copy 
>>> a[0].append('foo') #changing a mutable object inside a changes it in c too 
>>> a 
[[1, 2, 3, 'foo'], [4, 5, 6], [7, 8, 9]] 
>>> c 
[[1, 2, 3, 'foo'], [4, 5, 6], [7, 8, 9]] 

d = b[:] साधन के तत्वों द्वारा ग के सभी तत्वों की जगह ख की एक उथले प्रतिलिपि बना सकते हैं और घ के लिए असाइन करें मतलब है, यह d = list(b)

>>> l = [1,2,3,4,5] 
>>> m = [1,2,3] 
>>> l = m[::-1] 
>>> l 
[3,2,1] 

>>> l = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 
>>> m = l[:] #creates a shallow copy 
>>> l[0].pop(1) # a mutable object inside l is changed, it affects both l and m 
2 
>>> l 
[[1, 3], [4, 5, 6], [7, 8, 9]] 
>>> m 
[[1, 3], [4, 5, 6], [7, 8, 9]] 
के समान है
+1

बहुत अर्थपूर्ण कहा। (मेरे द्वारा +1) – mgilson

+0

+1 बहुत संक्षिप्त और स्पष्ट स्पष्टीकरण के लिए – Levon

+0

क्या कोई अंतर कार्यक्षमता है? –

2

इसमें कोई फर्क नहीं पड़ता है। c[:]=a उस सूची को अद्यतन करता है जो c जगह में संदर्भित करता है। d=b[:] एक नई सूची बनाता है जो बी की एक प्रति है (चौथी पंक्ति पर बनाई गई पुरानी सूची को भूलना)। अधिकांश अनुप्रयोगों में, आप अंतर को देखने की संभावना नहीं रखते हैं जब तक कि आपके आस-पास के सरणी के अन्य संदर्भ न हों। बेशक, c[:]=... संस्करण के साथ, आपके पास पहले से ही बैठे c की एक सूची होनी चाहिए।

4

अश्विनी ने क्या कहा।

In [1]: a=[1,2,3] 

In [2]: b = a 

In [3]: c = a[:] 

In [4]: b, c 
Out[4]: ([1, 2, 3], [1, 2, 3]) 

In [5]: a is b, a is c 
Out[5]: (True, False) 

और दूसरी तरह:

In [1]: a = [1,2,3] 

In [2]: aold = a 

In [3]: a[:] = [4,5,6] 

In [4]: a, aold 
Out[4]: ([4, 5, 6], [4, 5, 6]) 

In [5]: a = [7,8,9] 

In [6]: a, aold 
Out[6]: ([7, 8, 9], [4, 5, 6]) 

देखें क्या होता है :) मैं थोड़ा विस्तार से बता देंगे?

2

Ashwini's answer का सटीक वर्णन क्या हो रहा है, यहाँ हैं दो तरीकों के बीच मतभेद के कुछ उदाहरण:

a=[1,2,3] 
b=[4,5,6] 
c=[] 
c2=c 
d=[] 
d2=d 

c[:]=a       # replace all the elements of c by elements of a 
assert c2 is c     # c and c2 should still be the same list 
c2.append(4)      # modifying c2 will also modify c 
assert c == c2 == [1,2,3,4] 
assert c is not a     # c and a are not the same list 

d=b[:]       # create a copy of b and assign it to d 
assert d2 is not d    # d and d2 are no longer the same list 
assert d == [4,5,6] and d2 == [] # d2 is still an empty list 
assert d is not b     # d and b are not the same list 
संबंधित मुद्दे