python中list賦值問題

有些時候我們在for循環中想把某一個list或者dict賦值給一些元素,比如下面這種場景:

我們想得到的是lst2的值是

[0]
[0, 1]
[0, 1, 2]
[0, 1, 2, 3]
[0, 1, 2, 3, 4]

但是結果是

[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4]
lst1 = []
lst2 = []
for i in range(5):
    lst1.append(i)
    lst2.append(lst1)
for j in lst2:
    print(j)

這是因爲我們一直在將同一個lst1賦值給lst2的元素,並且一直在清空lst1。有以下處理方法:

①深拷貝

有深拷貝就有淺拷貝,淺顯地說淺拷貝就是不管怎麼變化都是指向同一個尋址地址,所以原對象和拷貝對象只要一者有變動,都會聯動變化,也就是上面lst2的內容都變成[0,1,2,3,4]的意思。而深拷貝則是複製出一個不相關的對象,原對象和拷貝出來的對象變化不相關。

import copy
lst1 = []
lst2 = []
for i in range(5):
    lst1.append(i)
    lst2.append(copy.deepcopy(lst1))
for j in lst2:
    print(j)

②字符串固定

lst1 = []
lst2 = []
for i in range(5):
    lst1.append(i)
    lst2.append(str(lst1))
for j in lst2:
    print(j)

上述代碼能夠得到和深拷貝一樣的結果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章