2017-04-11 73 views
2

我明白我的問題來自哪裏,我根本不知道如何解決它。列表項在列表中的多個項目中發生更改

for x in listoflists: 
    if x[1] == [1,0]: 
     q=[0, 0] 
     for z in range(5): 
      q[z] = x[:] 
      q[z][1] = [0,1] 
      q[z][0][-1] = q[z][0][-1] * 1.25 
      print(id(q[z][0][-1])) 
     list.append(q) 

我所試圖做的是:

  1. 進入一些數據,我已經收集,並在那裏我有交換數據標籤從[1,0][0,1]
  2. 副本然後進入零指數並將價格列乘以某個因子來放大。

我現在所擁有的是將所有先前的值更改爲我想要的最後一個值。

我知道這是與Python處理列表作爲參考。

我不得不將第一行改爲x來減輕這一點,但我不知道如何避開我特別索引列表項的部分,因爲它顯示id爲兩個不同的存儲空間。

我所看到的所有解決方案都顯示列表解析,但我不知道這是如何適用於我的情況,因爲它似乎像我的z索引工作正常,他們都有單獨的內存ID。

+6

描述是很難遵循的,具有輸入和預期結果/輸出的MCVE對於試圖理解你想要的行爲的人來說會創造奇蹟。 – timgeb

+2

問題是'x [:]'做了'x'的淺拷貝。你需要做一個深層複製,以便複製下一個層次。 – Barmar

回答

1

您需要進行深度複製。切片做淺拷貝。

from copy import deepcopy 

lst1 = ['a','b',['ab','ba']] 

lst2 = deepcopy(lst1) 
id(lst1[2]) 
# 4451912 
id(lst2[2]) 
# 51003144