我有一個簡單的問題。我從文件中讀取一個字符串並存儲在一個列表(名爲:公式)中。然後我將(公式)存儲在另一個變量(fstore =公式)中,以備後用。然後我改變了公式,事實證明,fstore也在改變。爲什麼這種情況繼續發生?我希望fstore保持不變。我沒有在程序的其他地方使用fstore。我的任務(fstore = formula)是否錯誤?python變量
周杰倫
我有一個簡單的問題。我從文件中讀取一個字符串並存儲在一個列表(名爲:公式)中。然後我將(公式)存儲在另一個變量(fstore =公式)中,以備後用。然後我改變了公式,事實證明,fstore也在改變。爲什麼這種情況繼續發生?我希望fstore保持不變。我沒有在程序的其他地方使用fstore。我的任務(fstore = formula)是否錯誤?python變量
周杰倫
請記住,在Python這些名稱不是變量,他們引用變量。所以你最後會有兩個別名到一個商店。看一看複製模塊,或者用這個:
cpy = mystr[:]
作品!非常感謝:) :) – Jay 2011-05-01 04:55:48
最重要的這裏的區別是可變和之間不變數據類型。在python中,列表是可變的,而元組是不可變的。這意味着,當你「變」一元組這樣的值:
t1 = (1, 2, 3) # t1 points to (1, 2, 3)
t2 = t1 # t2 points to the same tuple as t1
t1 = (2, 3, 4) # t1 points to a new tuple (2, 3, 4)
你實際上是創建一個全新的元組和分配t1
以指向新的記錄。 t2
仍然指向舊的元組,因爲元組是不可改變的,所以不能改變。簡而言之,如果您爲變量指定不可變的值,則可以假定該值永遠不會更改 - 除非您明確地爲變量指定了新值。
但是,當你改變一個列表的價值,你實際上改變列表本身:
l1 = [1, 2, 3] # l1 points to [1, 2, 3]
l2 = l1 # l2 points to the same list as l1
l1[0] = 5 # now [1, 2, 3] becomes [5, 2, 3]
由於l1
和l2
都指向同一個列表,它們都改變時,其中的一個改變。
要當l1
變化,只需使用list
不會改變一個副本:
l2 = list(l1)
或者使用切片表示法:
l2 = l1[:]
作品!太感謝了 :) – Jay 2011-05-01 04:55:55
這是功課? – kanaka 2011-05-01 02:17:01
可能重複[Python變量怪異?](http://stackoverflow.com/questions/3619368/python-variable-weirdness) – geoffspear 2011-05-01 05:01:05