列表项已在列表中的多个项目中更改

时间:2017-04-11 16:01:58

标签: python

我明白我的问题源于何处,我根本不知道如何修复它。

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. 然后进入零指数并将价格列乘以某个因子以进行扩展。
  3. 我目前所拥有的是将所有先前值更改为我想要的最后一个值。

    我知道这与python处理列表作为参考有关。

    我不得不将我的第一行改为x以减轻这一点,但我不知道如何绕过我采用特定索引列表项的部分,因为它显示{{1作为两个不同的内存空间。

    我见过的所有解决方案都显示了列表推导,但我不知道这对我的情况有何影响,因为看起来我的z索引工作正常并且它们都有独立的内存ID。

1 个答案:

答案 0 :(得分:2)

你需要做深层复制。切片做浅拷贝。

from copy import deepcopy

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

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