2014-12-27 41 views
0

我性學習的巨蟒(以前有一點點ç實際經驗),我試圖解決一個數學問題,但遇到了意想不到的事情:列表值的運作在Python

import math 
list_a = list_b = [0 for k in range(10)] 
print list_a[0] #test if list_a works] 
for i in range(10): 
    list_a[i] = math.sqrt(math.pi + i**2) 
    print list_a[i]          #value 
    list_b[i] = math.sqrt(list_a[i]**2 + math.pi**2) 
    print list_a[i]          #why changed to another value? 
    print '-----------------' 

爲什麼這行後

list_b[i] = math.sqrt(list_a[i]**2 + math.pi**2) 

list_a[i]變了嗎?

+0

'list_a'和'list_b'引用相同的列表對象。 – falsetru

回答

1

list_alist_b是同一個對象的標籤。如果你想使它們成爲副本替代,這樣做:

list_a = [0 for k in range(10)] 
list_b = list_a[:] 

另一種方法是使用列表理解和Python的多項任務:

list_a, list_b, list_c = [[0 for k in range(10)] for i in range(3)] 
+0

感謝您的幫助!順便說一句,如果我想在同一時間刪除多個列表,是否有更簡單的方法? –

+0

@michaelhuang你可以同時定義變量; _a,B,C,d = 1,2,3,4_。所以,在列表變量上做到這一點。 – GLHF

+0

@michaelhuang編輯。 – Pradhan

1
list_a = list_b = [0 for k in range(10)] 

因爲list_a等於list_b。所以如果list_b被更改,那麼list_a將會改變。